机器学习之树模型
Posted dyl222
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习之树模型相关的知识,希望对你有一定的参考价值。
树模型主要有ID3、C4.5、C5.0、OC1以及CART等,使用最多的树模型为CART,sklearn中的决策树模型是基于CART的。
在介绍树模型之前先介绍一下信息熵、信息增益以及GINi系数。
信息熵:熵度量了事物的不确定性,越不确定的事物,它的熵就越大。
信息增益:它度量了在知道当前特征之后类别的不确定性所减少的程度。信息增益越大不确定性减少的程度越大,对类别的确定越有利。
基尼系数的性质与信息熵一样:度量随机变量的不确定度的大小。
基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经过A=a分割后集合D的不确定性。基尼指数越大,样本的不确定性也就越大。
基尼系数的特质如下:(具体参考:https://blog.csdn.net/yeziand01/article/details/80731078)
一、ID3
ID3算法就是用信息增益大小来判断当前节点应该用什么特征来构建决策树,用计算出的信息增益最大的特征来建立决策树的当前节点
信息熵的具体计算例子如下:
比如我们有15个样本D,输出为0或者1。其中有9个输出为1, 6个输出为0。 样本中有个特征A,取值为A1,A2和A3。在取值为A1的样本的输出中,有3个输出为1, 2个输出为0,取值为A2的样本输出中,2个输出为1,3个输出为0, 在取值为A3的样本中,4个输出为1,1个输出为0.
ID3存在的不足:第一、没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。第二、ID3采用信息增益大的特征优先建立决策树的节点。但是在相同条件下,取值比较多的特征比取值少的特征信息增益大。(对于信息增益作为评价标准偏向于选择较多的特征,其实是很简单的。从信息增益的定义我们知道,它度量了输出在知道特征以后不确定性减少程度。当特征类别数较多时候,这个不确定性减少程度一般会多一些,因为此时特征类别数较多,每个类别里的样本数量较少,样本更容易被划分的散落到各个特征类别,即样本不确定性变小。)第三、ID3算法对于缺失值的情况没有做考虑。第四、没有考虑过拟合的问题。
二、C4.5
C4.5是在ID3的不足之处上进行改进得来的。第一、对于连续值的处理。例如某特征具备m个连续值,先对这m个连续值进行排序,然后取这m个值两两之间的中值作为这一特征的离散取值,这样就把连续型特征转换为离散型特征了。在根据划分出的取值进行条件熵的计算时,小于该值的当做一类,大于该值的当做另一类,同时计算完条件熵之后该属性后面还可以参与子节点的产生选择过程。
对于连续值的处理例子如下:(具体参考:https://blog.csdn.net/u012328159/article/details/79396893)
第二、引入信息增益比大小来判断当前节点应该用什么特征来构建决策树,用计算出的信息增益比最大的特征来建立决策树的当前节点。
信息增益比=信息增益/特征熵
特征熵的计算例子如下:
特征A有3个特征值A1,A2,A3。 3个特征值对应的无缺失A特征的样本个数为2,3,4.则a同时划分入A1,A2,A3。对应权重调节为2/9,3/9, 4/9。则特征熵为-2/9*log(2/9)-3/9*log(3/9)-4/9*log(4/9)
第三、提供了缺失值处理。第四、提供了剪枝操作来解决决策树的过拟合问题。
C4.5处理连续性数值和离散型数值最大的区别在于,对于连续型数值以两两中值作为离散型取值,在处理完之后它还可以参与子节点的产生选择过程。
C4.5算法的缺点:
C4.5由于仍然使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。
C4.5只能用于分类。且使用了模型较为复杂的多叉树。
三、CART
CART:它既可以用于分类也可用于回归,是sklearn中的决策树所使用的方法。
CART分类树对于连续值的处理和C4.5思路一样把连续型数值转换为离散型的,但是在判断当前节点应该用什么特征来构建决策树时它选择的度量方式是基尼系数(基尼系数代表了模型的不纯度)基尼系数越小,则不纯度越低,特征越好。
CART对于离散值的处理与C4.5也有不同之处。对于CART分类树离散值的处理问题,采用的思路是不停的二分离散特征。回忆下ID3或者C4.5,如果某个特征A被选取建立决策树节点,如果它有A1,A2,A3三种类别,我们会在决策树上一下建立一个三叉的节点。这样导致决策树是多叉树。但是CART分类树使用的方法不同,他采用的是不停的二分,还是这个例子,CART分类树会考虑把A分成{A1}和{A2,A3},{A2}和{A1,A3},{A3}和{A1,A2}三种情况,找到基尼系数最小的组合,比如{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的节点。同时,由于这次没有把特征A的取值完全分开,后面我们还有机会在子节点继续选择到特征A来划分A1和A3。这和ID3或者C4.5不同,在ID3或者C4.5的一棵子树中,离散特征只会参与一次节点的建立。
gini系数的计算案例:
CART对于离散值与连续值的处理:
对于CART分类树连续值的处理问题,其思想和C4.5是相同的,都是将连续的特征离散化。唯一的区别在于在选择划分点时的度量方式不同,C4.5使用的是信息增益比,则CART分类树使用的是基尼系数。
对于CART分类树离散值的处理问题,采用的思路是不停的二分离散特征。
回忆下ID3或者C4.5,如果某个特征A被选取建立决策树节点,如果它有A1,A2,A3三种类别,我们会在决策树上一下建立一个三叉的节点。这样导致决策树是多叉树。但是CART分类树使用的方法不同,他采用的是不停的二分,还是这个例子,CART分类树会考虑把A分成{A1}和{A2,A3},{A2}和{A1,A3},{A3}和{A1,A2}三种情况,找到基尼系数最小的组合,比如{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的节点。同时,由于这次没有把特征A的取值完全分开,后面我们还有机会在子节点继续选择到特征A来划分A1和A3。这和ID3或者C4.5不同,在ID3或者C4.5的一棵子树中,离散特征只会参与一次节点的建立。
CART解决回归问题:
首先,我们要明白,什么是回归树,什么是分类树。两者的区别在于样本输出,如果样本输出是离散值,那么这是一颗分类树。如果果样本输出是连续值,那么那么这是一颗回归树。
除了概念的不同,CART回归树和CART分类树的建立和预测的区别主要有下面两点:
1)连续值的处理方法不同
2)决策树建立后做预测的方式不同。
对于连续值的处理,我们知道CART分类树采用的是用基尼系数的大小来度量特征的各个划分点的优劣情况。这比较适合分类模型,但是对于回归模型,我们使用了常见的和方差的度量方式,CART回归树的度量目标是,对于任意划分特征A,对应的任意划分点s,把特征划分成的数据集D1和D2,求出D1和D2各自集合的均方差,把D1和D2的均方差之和最小所对应的特征和特征值作为划分点。
具体分析为:CART回归树假如有4个变量,每个变量有10个值(连续变量)那么去计算每个变量的每个划分点的均方误差来选择优先的变量和划分点其实就是去计算4*9 = 36,然后比大小。
对于决策树建立后做预测的方式,上面讲到了CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
除了上面提到了以外,CART回归树和CART分类树的建立算法和预测没有什么区别。
CART树剪枝策略:
CART回归树和CART分类树的剪枝策略除了在度量损失的时候一个使用均方差,一个使用基尼系数,算法基本完全一样,这里我们一起来讲。
由于决策时算法很容易对训练集过拟合,而导致泛化能力差,为了解决这个问题,我们需要对CART树进行剪枝,即类似于线性回归的正则化,来增加决策树的泛化能力。但是,有很多的剪枝方法,我们应该这么选择呢?CART采用的办法是后剪枝法,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。
也就是说,CART树的剪枝算法可以概括为两步,第一步是从原始决策树生成各种剪枝效果的决策树,第二部是用交叉验证来检验剪枝后的预测能力,选择泛化预测能力最好的剪枝后的数作为最终的CART树。
CART的缺点:
1)大家应该有注意到,无论是ID3, C4.5还是CART,在做特征选择的时候都是选择最优的一个特征来做分类决策,但是大多数,分类决策不应该是由某一个特征决定的,而是应该由一组特征决定的。这样得到的决策树更加准确。这个决策树叫做多变量决策树(multi-variate decision tree)。在选择最优特征的时候,多变量决策树不是选择某一个最优特征,而是选择最优的一个特征线性组合来做决策。这个算法的代表是OC1,这里不多介绍。
2)如果样本发生一点点的改动(这里指的是数据分布的波动,而决策树有很好的容错性是指特征存在异常值并不会给最终的预测结果造成很大的影响。),就会导致树结构的剧烈改变。这个可以通过集成学习里面的随机森林之类的方法解决。
以上是关于机器学习之树模型的主要内容,如果未能解决你的问题,请参考以下文章