本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点。
决策树:是一种基本的分类和回归方法。在分类问题中,是基于特征对实例进行分类。既可以认为是if-then规则的集合,也可以认为是定义在特征空间和类空间上的条件概率分布。
决策树模型:决策树由结点和有向边组成。结点一般有两种类型,一种是内部结点,一种是叶节点。内部结点一般表示一个特征,而叶节点表示一个类。当用决策树进行分类时,先从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到子结点。而子结点这时就对应着该特征的一个取值。如此递归对实例进行测试分配 ,直至达到叶结点,则该实例属于该叶节点的类。
决策树分类的主要算法有ID3,C4.5。回归算法为CART算法,该算法既可以分类也可以进行回归。
(一)特征选择与信息增益准则
特征选择在于选取对训练数据具有分类能力的 特征,而且是分类能力越强越好,这样子就可以提高决策 树 的效率。如果利用一个特征进行分类,分类的结果与随机分类的结果没有差异,那么这个特征是没有分类能力的。那么用什么来判别一个特征的分类能力呢?那就是信息增益准则。
何为信息增益?首先,介绍信息论中熵的概念。
熵度量了随机变量的不确定性,越不确定的事物,它的熵就越大。具体的,随机变量X的熵定义如下:
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性,随机变量X给定的条件下随机变量Y的条件熵为H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:
信息增益表示在已知特征X的情况下,而使得Y的信息的不确定性减少的程度。信息增益的定义 式如下:
g(D,A)表示特征A对训练集D的信息增益,其为集合D的经验熵H(D)与在特征A给定条件下D的经验条件熵H(D|A)之差。一般熵与条件熵之差,称为互信息。在决策树中,信息增益就等价于训练数据集中的类与特征的互信息。
具体信息增益的计算
(1)计算数据集D的经验熵H(D)
(2)计算特征A对数据集D的经验条件熵H(D|A):
(3)计算信息增益
(二)ID3算法
ID3算法以信息增益作为选择特征的准则
输入:训练数据集D,特征集A(可以从训练集中提取出来),阀值ε(用来实现提前终止);
(1)若当前节点中所有实例属于同一类Ck,则该结点作为叶子节点,并将类别Ck作为该结点的输出类;
(2)若A为空,则将当前结点作为叶子节点,并将数据集中数量最多的类作为该结点输出类;
(3)否则,计算所有特征的信息增益,若此时最大的信息增益小于阀值ε,则将当前结点作为叶子节点,并将数据集中数量最多的类作为该结点输出类;
(4)若当前的最大信息增益大于阀值ε,则将最大信息增益对应的特征A作为最优划分特征对数据集进行划分,根据特征A的取值将数据集划分为若干个子结点;
(5)对第i个结点,以Di为训练集,以Ai为特征集(之前用过的特征从特征集中去除),递归的调用前面的1- 4 步。
ID3算法的缺点:
(1)ID3算法会偏向于选择类别较多的属性(形成分支较多会导致信息增益大)
(2)ID3算法没有考虑连续值,对与连续值的特征无法进行划分
(3) ID3算法对于缺失值的情况没有做考虑。
(4)ID3算法只有树的生成,容易产生过拟合。
(5)ID3算法采用贪心算法,每次划分都是考虑局部最优化,而局部最优化并不是全局最优化,通常需对其进行剪枝,而决策树剪枝是对模型进行整体优化。
(三)C4.5算法
C4.5算法与ID3算法相似,不过在生成树的过程中,采用信息增益比来作为选择特征的准则。
增益比:
其中为特征熵,n为特征取值的数目。
C4.5算法的训练过程与ID3相似,见ID3算法。
C4.5其实是针对ID3算法的不足改进后的算法,采用信息增益比,是为了解决ID3算法会偏向于选择类别多的属性的问题。而对于ID3算法不能对连续值进行划分的问题 ,C4.5采用连续值特征离散化的。此外,C4.5还从以下两方面考虑了缺失值的问题:一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的处理。对于ID3存在的过拟合问题,C4.5采用了引进正则化系数,对决策树进行剪枝。
(四)CART算法
CART树既可以用于 分类 ,也可以用于回归。CART树的生成过程同样包括特征选择,树的生成及剪枝。
与ID3,C4.5算法不同的是,首先,CART进行特征选择时,回归树用的平方误差最小化的准则,而对于分类树用基尼系数。对于平方误差好理解。主要介绍下分类时用的基尼系数,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。具体的,在分类问题中,假设有K个类别,第k个类别的概率为, 则基尼系数的表达式为:
如果是二类分类问题,计算就更加简单了,如果属于第一个样本输出的概率是p,则基尼系数的表达式为:
简单明了的理解基尼系数那就是,从集合中随机选取两个样本,两个样本的类别不一致的概率,所以这概率越低,说明划分的集合的不纯度就越低。
对于样本D,如果根据特征A的某个值a,把D分成D1和D2两部分,则在特征A的条件下,D的基尼系数表达式为:
基尼系数用于度量时,与熵之半,分类误差率的关系。可见,基尼系数和熵之半的曲线非常接近,都可以近似的代表分类误差率
此外,CART树在生成过程中,生成的是二叉树。即CART树在生成过程中仅仅是对特征的值进行二分,而不是多分。
CART分类树建立的过程:
对于给定训练数据集D,从根结点开始递归的建立二叉决策树:
1)根据数据集D中每个特征A,以及其可能的取值a,按照取值的‘是‘和‘否’将数据集分成两部分,然后计算基尼系数 。
2)在所有可能的特征A以及他们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征的与最优切分点。
依最优特征和最优切分点,将现结点生成两个子结点,将训练数据集依特征分配到两个子结点中。
3)递归的调用1)2)步骤,直至达到停止条件
停止条件有:结点中的样本数小于预定的阈值,或者样本集的基尼系数小于预定的阈值(此时基尼系数已经非常小,样本基本属于同一 类),
或者结点样本中没有更多的特征。
CART回归树建立的过程:
首先说下分类树和回归树的区别吧,分类树样本输出的值为离散的类别值(如二分类输出的值为0和1),而回归树样本输出的是连续值。
在分类树中,采用基尼系数 来对特征进行划分。而在CART回归树用的平方误差最小化准则,具体就是对于任意划分特征A,
对应的任意划分点s两边划分成的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时将D1和D2的均方差之和最小所对应的特征和特征值作为划分点。
表达式如下:
其中,2为D2数据集的样本输出均值
1)对于数据集D,通过平方误差准则(上面式子),选择最优的切分变量和切分点;
2)用选定的最优切分变量和切分点划定两个子区域区域,并输出该区域数据集样本的均值。
3)继续对两个子区域进行调用步骤1)和2),直至满足停止条件
4)最后将样本空间划分成M个区域,即M个叶结点,以及M个与叶结点对应的输出值。
CART树的剪枝
CART树的剪枝就是加入先验的过程,其损失函数如下:
|
其中T为任意子树,C(T)为对训练数据的预测误差(如基尼系数),|T|为叶结点的个数,α>=0为参数,C)为整体损失。
正则化项的加入能够起到剪枝的作用 ,从而降低了模型的复杂度。而α参数起到了平衡模型复杂度与训练数据拟合度的 作用。
(五)总结
决策树的缺点
1)决策树算法属于贪心的算法,在生成树的过程中只考虑局部最优形成,而不考虑整体最优,所以生成的树容易产生过拟合,
(即对训练集的分类很正确,但是对未知的数据分类却没那么准确,泛化能力不强)。所以需要在决策树生成后对其进行剪枝,
也就是说简化模型的复杂度,一般通过加正则化项来进行剪枝。
2)决策树对训练数据的变化敏感,数据集变化,树就会发生变化;该缺点可以通过集成树来解决。譬如随机森林,随机森林的数据样本扰动。
3)决策树没有考虑变量之间相关性,每次筛选都只考虑一个变量(因此不需要归一化)
决策树的优点:
1)简单直观,模型解释性好
2)基本不需要预处理,不需要提前归一化,处理缺失值
3)使用决策树预测的代价是)。 m为样本数
4)既可以处理离散值也可以处理连续值
5) 对于异常点的容错能力好,健壮性高
6)可以处理多维度输出的分类问题
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:机器学习总结(八)决策树ID3,C4.5算法,CART算法 - Python技术站