文章目录
决策树
决策树是既可以作为分类算法,又可以作为回归算法,而且在经常被用作为集成算法中的基学习器。决策树是一种很古老的算法,也是很好理解的一种算法,构建决策树的过程本质上是一个递归的过程,采用if-then的规则进行递归(可以理解为嵌套的 if - else 的条件判断过程),关于递归的终止条件有三种情形:
1)当前节点包含的样本属于同一类,则无需划分,该节点作为叶子节点,该节点输出的类别为样本的类别
2)该节点包含的样本集合为空,不能划分
3)当前属性集为空,则无法划分,该节点作为叶子节点,该节点的输出类别为样本中数量多数的类别
事实上,我们在递归的过程中不会等达到上面的条件才终止递归,往往会提前终止来减小过拟合(提前终止也是一种较好的减小过拟合的方式,不只是在决策树算法中,在很多场景下都有应用)。
决策树主要的优点是模型具有很好的可读性,模型可以可视化,分类速度快(log(n) 的时间复杂度)
决策树主要包含三个过程:特征选择、决策树生成和决策树剪枝
两个核心问题:
- 如何从数据表中找出最佳节点和最佳分枝;
- 如何让决策树停止增长,防止过拟合
一、特征选择
特征选择是当你构建树的过程中,根节点如何选择,你要选择哪个特征进行分枝。
1、信息熵
熵度量了事物的不确定性,熵越大,表示事物的不确定性越高,混乱程度越高。则随机变量X的熵定义为:
条件熵H(Y|X)表示在已经知道随机变量X的条件下随机变量Y的不确定性, 随机变量X给定的条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:
2、不纯度
决策树的每个叶子结点中都会包含一组数据,在这组数据中,如果某一类标签占有很大的比例,我们就说叶子结点越‘纯’。叶子结点越纯,不纯度就越低,分枝就约好。不纯度(混乱程度)越低,纯度就越高,决策树对训练集拟合的就越好。
决策树优化的最终目标就是使叶子结点的不纯度最低
计算不纯度一般有三种方式:
- 误差率,误差率越低,不纯度越低,纯度越高
- 信息熵:信息熵越高说明越混乱
- 基尼指数:越高说明越混乱
- MSE:回归树用均方误差
3、分枝策略
以ID3为例,他在分枝的时候会尽可能选组使得该节点对应的子节点信息熵最小的特征进行切分(也就是说,你要选取某个特征进行分枝,你分支后得到的叶子结点的纯度越高越好)。换言之就是要求父节点信息熵与子节点总信息熵的差值要最大,二者之差就是信息增益。
因此信息增益就是父节点的信息熵与子节点总信息熵的差值。(父节点信息熵-所有子节点信息熵的加权平均),信息增益是ID3分枝的衡量指标。
二、决策树生成
我们构建决策树的时候并不是选择所有的特征进行划分,否则会出现过拟合的情况,泛化能力较差。
1、ID3
ID3:特征选择指标信息增益,选择信息增益最大的那个特征。信息增益表示由于特征A使得对数据集分类的不确定性减少的程度。
1、计算数据集D的信息熵H(D):
2、计算特征A对数据集D的条件熵H(D|A):
3、计算信息增益g(D, A)
大概流程
定义输入值:训练数据集D,特征集A(可以从训练集中提取出来),阀值ε(用来实现提前终止);
1)若当前节点中所有实例属于同一类Ck,则该结点作为叶子节点,并将类别Ck作为该结点的输出类;
2)若A为空,则将当前结点作为叶子节点,并将数据集中数量最多的类作为该结点输出类;
3)否则,计算所有特征的信息增益,若此时最大的信息增益小于阀值ε,则将当前结点作为叶子节点,并将数据集中数量最多的类作为该结点输出类;
4)若当前的最大信息增益大于阀值ε,则将最大信息增益对应的特征A作为最优划分特征对数据集进行划分,根据特征A的取值将数据集划分为若干个子集;
5)对第i个结点,以Di为训练集,以Ai为特征集(将之前用过的特征从特征集中去除),递归的调用前面的1- 4 步。
问题:ID3(信息增益)的局限性:
1、父节点的分枝越多,会导致子节点的总信息熵变小,因此使用信息增益作为划分训练集的标准,存在偏向于特征取值较多的那个特征;
2、不能直接处理连续变量,如果要处理连续变量需离散化;
3、对缺失值较为敏感,需提前处理缺失值
4、ID3算法没有考虑过拟合的问题,而在决策树中,过拟合是很容易发生的;
5、ID3算法采用贪心算法,每次划分都是考虑局部最优化,而局部最优化并不是全局最优化,当然这一缺点也是决策树的缺点,获得最优决策树本身就是一个NP难题,所以只能采用局部最优;
2、C4.5
C4.5:使用信息增益比作为选择特征的指标,就是在信息增益的基础上除以关于特征A的信息熵
C4.5算法的提出旨在解决ID3算法的缺点 ,因此讲解C4.5算法我们从ID3算法的缺点出发:
1)采用信息增益比来替代信息增益作为寻找最优划分特征,信息增益比的定义是信息增益和特征熵的比值,对于特征熵,特征的取值越多,特征熵就倾向于越大;
信息增益比的表达式如下:
2)在C4.5中,增加了针对连续变量的处理手段:对这一列数据从小到大进行排序;选取相邻的两个数的中间数作为切分数据集的备选点,若有N个连续变量的值,则会有N-1个备选切分点,并且每个切分点都代表着一种切分方案。
需要注意的是对连续变量的处理并不是将其转化成N-1个水平的分类变量,而是将其转换成了N-1个二分方案! 依次算它们的信息增益,选取信息增益最大的点作为离散划分点
3)对于缺失值的问题,我们需要解决两个问题
第一是在有缺失值的情况下如何选择划分的属性,也就是如何得到一个合适的信息增益比;
第二是选定了划分属性,对于在该属性的缺失特征的样本该如何处理。
对于第一个问题,对于某一个有缺失特征值的特征A。C4.5的思路是将数据分成两部分,对每个样本设置一个权重(初始可以都为1),然后划分数据,一部分是有特征值A的数据D1,另一部分是没有特征A的数据D2. 然后对于没有缺失特征A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征A缺失的样本加权后所占加权总样本的比例。
对于第二个子问题,可以将缺失特征的样本同时划分入所有的子节点,不过将该样本的权重按各个子节点样本的数量比例来分配。比如缺失特征A的样本a之前权重为1,特征A有3个特征值A1,A2,A3。 3个特征值对应的无缺失A特征的样本个数为2,3,4。则a同时划分入A1,A2,A3。对应权重调节为2/9,3/9,4/9;
4)对于过拟合的问题,采用了后剪枝算法和交叉验证对决策树进行剪枝处理,这个在CART算法中一起介绍。
虽说C4.5解决了ID3算法中的几个缺点,但其仍有很多不足之处:
1)C4.5的剪枝算法不够优秀;
2)C4.5和ID3一样,都是生成的多叉树,然而在计算机中二叉树模型会比多叉树的运算效率高,采用二叉树也许效果会更好;
3)在计算信息熵时会涉及到大量的对数运算,如果是连续值还需要进行排序,寻找最优离散划分点,这些都会增大模型的运算;
4)C4.5算法只能处理分类问题,不能处理回归问题,限制了其应用范围。
3、CART树
CART树是在C4.5算法的基础上对其缺点进行改进的算法,采用二叉树作为树模型的基础结构,采用基尼指数(分类问题)和和方差(回归问题)属性来选取最优划分特征。CART算法由以下两部组成:
1)决策树生成:基于训练集极大可能的生成决策树(事实上,在生成树的过程中可以加入一些阀值,对决策树做一些预剪枝处理,配合之后的后剪枝效果会更好);
2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准(寻找全局最优子树);
3.1 分类树
先引入基尼指数,基尼指数也可以表述数据集D的不确定性,基尼指数越大,样本集合的不确定性就越大,对于给定的样本集,假设有k个类别,第k个类别的概率为Pk,则基尼指数的表达式为:
在给定特征A的情况下,若集合被特征A的取值给分成D1和D2 ,则在特征A的条件下的基尼指数可以表述为:
因此在进行最优划分特征选择时,我们选择在该特征下基尼指数最小的特征(相当于信息增益中的条件熵一样,条件熵最小,姿信息增益也就越大),而且在二分类的问题中基尼指数和熵的差异不大,基尼指数和熵之半的曲线如下
如何解决特征的二叉分支
引入基尼指数解决了计算熵时大量的对数运算的问题,然而CART树是二叉树,那么我们在选取了特征之后,又该如何划分数据集呢?
1)对于连续值
在C4.5中我们对于连续值的处理就是将其划分为两类,那么在CART中更是如此,划分方式和C4.5算法一模一样,唯一的区别是度量方式不同,在CART中采用基尼指数作为度量属性,选择使得在该特征下基尼指数最小的划分点来将连续值划分为两类;
2)对于离散值
对与离散值的处理和ID3或者C4.5都有很大的不同,对于某个特征A,其取值可能不只两个,对于取值大于2的,我们需要随意组合将其分为两类,选择基尼指数最小的那一类作为当前的划分(因为对于特征A,并没有将其按照取值完全分开,因此此时特征A不会从特征集中去除,会留到之后可能再被选择,这也是和ID3、C4.5不同的地方)。
对于CART分类树的算法流程和C4.5差不多,只要注意每次都是进行二类划分,即使该特征的取值有多个。
3.2 回归树
CART回归树是CART算法中新引进的用来处理回归问题,其算法流程和CART分类树差不多,但在细节上有写不同,主要是以下两个方面:
1)对连续值的处理方式不一样,采用的特征选择属性不一样,在这里采用的是常用的和方差来进行特征选择,其表达式如下:
对于任意特征A,对应的任意划分点将数据集划分成D1和D2两个部分,寻找到使得D1和D2各自集合的均方误差最小,并且D1和D2的均方误差之和也最小的划分点,该划分点就是该特征最佳的划分点,因此利用和方差选取最优特征时,就是选取使得和方差最小的特征和划分点。
2)决策树的预测方式不一样,在分类算法中都是采用叶子结点中数量最多的类别作为输出值,而对于回归问题,一般采用叶子结点中的样本集的均值或者中位数作为输出值,有的还会基于叶子结点中的集合建立线性回归模型来作为输出值。
CART算法虽然在C4.5算法的基础上进行了很大的改进,但是仍然存在一些缺点:
1)每次用最优特征进行划分,这种贪心算法很容易陷入局部最优,事实上分类决策不应该由某一特征决定,而是一组特征决定的,比如多变量决策树(事实上我觉得还不如用集成算法);
2)样本敏感性,样本的一点改动足以影响整个树的结构,也可以通过集成算法解决;
感觉单独的决策树算法用的不多,决策树大多是作为集成算法的基学习器来用的。
3.3 CART算法的剪枝
三、决策树的优缺点
决策树的优点:
1)决策树简单直观,相比于如神经网络之类的黑盒模型,决策树容易理解,还可以进行可视化;
2)基本上不需要做预处理,不需要做归一化,不需要处理缺失值;(因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。)
3)使用决策树进行预测的时间复杂度只有O(log2m),m为样本数;
4)即可以处理离散值,也可以处理连续值,无论数对于分类问题还是回归问题;
5)可以很容易的处理多分类的问题;
6)可以用交叉验证来对决策数进行剪枝,避免过拟合(对于很复杂的决策树,最好配合预剪枝一起处理);
7)对于异常点的容错性好,健壮性高;
决策树的缺点:
1)决策树很容易过拟合,很多时候即使进行后剪枝也无法避免过拟合的问题,因此可以通过设置树深或者叶节点中的样本个数来进行预剪枝控制;
2)决策树属于样本敏感型,即使样本发生一点点改动,也会导致整个树结构的变化,可以通过集成算法来解决;
3)寻找最优决策树是各NP难题,一般是通过启发式方法,这样容易陷入局部最优,可以通过集成算法来解决;
4)决策树无法表达如异或这类的复杂问题;
参考链接:https://www.cnblogs.com/jiangxinyang/p/9219771.html