您的位置:首页 > 其它

经典决策树算法:ID3、C4.5和CART

2017-04-22 13:04 459 查看
ID3

C45

CART

对比总结

ID3:

ID3(Iterative Dichotomiser 3) 是一种基本的决策树算法。它可用于对只含离散属性的样本集的分类任务。ID3每次根据信息增益选择最佳划分属性,基于样本该属性值的不同,把样本划分到不同的子结点。任意两个叶结点包含的样本不重叠,所有叶结点包含的样本构成完整训练样本集。

算法步骤

1.计算属性集中每个属性对应的信息增益。选择最大信息增益对应的属性为当前结点的分割属性。

2.根据训练样本在分割属性上属性值的不同,把训练样本划分到不同的分支结点中。并从属性集中去掉当前分割属性。

3.判断每个分支结点是否满足终止条件,对每个不满足终止条件的分支结点重复步骤1和2。

终止条件:

分支结点中所有训练样本都属于同一类

当前属性集为空,或所有训练样本在所有属性上取值相同,则将该结点类别设定为样本最多的类别

分支结点为空,则将其类别设定为父节点样本最多的类别

熵、信息增益和信息增益比:

1.熵:

熵表示随机变量的不确定性。熵越大,则随机变量的不确定性越大。对于离散变量,变量的取值可能越多,每个取值的概率越接近,则熵越大。

设P(X=xi)=pi,i=1,2,...,n.

则熵 H(X)=∑i=1npi⋅log1pi=−∑i=1npi⋅logpi

条件熵

H(Y|X)=∑i=1npiH(Y|X=xi)

2.信息增益与信息增益比

(1).符号:

D={(xn,yn)|n=1,2,...,N}:训练样本集

{Yi|i=1,...,S}:所有样本y值的集合

{Aj|j=1,...,K}:所有样本属性A取值的集合

Di⋅:所有y值等于Yi的训练集

D⋅j:所有属性A值为Aj的训练集

Dij:所有y值为Yi且属性A值为Aj的训练集合

|D|:样本集D中包含的样本个数

(2).已知数据集y值,求数据集的熵

H(D)=−∑i=1S|Di⋅||D|log2|Di⋅||D|

(3).已知特征A和y值,求数据集的熵

H(D|A)=∑j=1K|D⋅j||D|H(|D⋅j|)=−∑j=1K|D⋅j||D|∑i=1S|Dij||D⋅j|log2|Dij||D⋅j|

(4).特征A的信息增益

特征A的信息增益等于已知y值时数据集的熵减去已知特征A和y值时数据集的熵

gain(D,A)=H(D)−H(D|A)

(5).特征A的信息增益比

特征A的信息增益比等于特征A的信息增益除以特征A已知而y值未知时数据集的熵

ratio=gain(D,A)H(A)

其中

H(A)=−∑j=1K|D⋅j||D|log2|D⋅j||D|

ID3的缺点

ID3根据信息增益来选择划分属性。这种策略倾向于选择类别多的属性。直观来说,属性的类别越多,则平均来说每个属性类别下的目标类别越少,不确定性也就越小,该属性类别下的熵也就越小。加权之和也就越小。因此该属性的信息增益也就越大。

举个极端的例子,假设属性A有和样本数量一样的类别数目,即每个样本都有不同的A属性值,根据条件熵的计算公式,划分后的数据集熵为H(D|A)=∑j=1KP(A=Aj)H(Y|A=Aj)

由于每个满足A=Aj 的数据集只含一个样本,故根据熵的计算公式,有

H(Y|A=Aj)=∑i=1Spilog1pi=∑i=111log11=1×log1=0

所以H(D|X)=0 。熵取值范围大于等于零,故选择X作为划分属性得到的熵最小,X的信息增益最大。但是很明显X并不适合作为一个划分属性。

C4.5

为了改进ID3,Quinlan提出了C4.5算法。与ID3采用信息增益作为选择划分属性的依据不同,C4.5采用信息增益比作为划分依据。此外,C4.5还增加了对连续值的处理。

连续值处理:

假设X为一个连续属性,{x1,x2,...xn} 为X中所有取值的有序集合。则{si=xi+xi+12|i=1,2,...,n−1} 为X取值的二分点集合。

定义Di 为所有X值小于等于si 的数据集,Di¯ 为所有X值大于si 的数据集。

则已知X时数据集的熵为H(D|X)=mini{|Di||D|H(D|Di)+|Di¯||D|H(D|Di¯)}

由此可以定义连续值X的信息增益和信息增益比。

值得注意的是,与离散值最多只能一次作为划分属性不同,连续值可以多次作为划分属性。

缺失值处理:

面对缺失值,ID3只是简单的忽略缺失值,而C4.5采取不同的做法。

设定每个样本x的初始权重wx为1. 在涉及样本个数或比例的地方都用权重计算。

1.若在计算属性的信息增益比时,某些训练样本在该属性有缺失值:

设X′ 为去除缺失值后属性X的集合,D′ 为去除在属性X下有缺失值的样本后的数据集。则X的信息增益定义为:

gain(D,X)=|D′||D|gain(D′,X′)

2.在划分样本时,若样本在改划分属性下无缺失值,则划入对应子结点,权重不变。若样本在划分属性下有缺失值,则将样本划入所有子结点,并更新权重。设某个子结点中的非缺失样本占所有非缺失样本比例为r ,则更新该结点中每个缺失值样本的权重为wx=r⋅wx.

3.在预测样本类别时,采用和2中同样的方法分配样本及更新权重。最终采用样本所在的所有叶结点类别的加权平均,权重为样本在各叶结点下的权重。

CART:

CART(classification and regression) 即分类与回归树。顾名思义,CART即可用于回归也可用于分类。CART适合处理连续变量和二元离散变量。对于二元以上的离散变量,可采用one-hot encoding方法转化成二元变量。

与ID3和C4.5不同,CART为二叉树,每个内部结点只有两个子节点。故CART等价于把特征空间划分成有限个单元,用每个单元的y值预测分布。

CART构造的两步:

1.决策树生成:基于训练样本集生成决策树,生成的决策树要尽量大;

2.决策树剪枝:用验证数据集对已经生成的树进行剪枝,并选择最优子树。

回归树:

回归树中每个叶节点Rm 的输出值cm^ 定义为该节点上所有训练样本y值的平均,即 cm^=avg(yi|xi∈Rm) 。

回归树选择划分属性及划分点的步骤类似于C4.5选择连续属性,只是不再用信息增益比,而是用训练平方误差。

对于第j个变量x(j) 和切分点s,定义两个区域:

R1(j,s)={x|x(j)≤s}和R2(j,s)={x|x(j)>s}

则x(j)对应的训练平方误差为:

Lj=mins[∑xi∈R1(j,s)(yi−c1^)2+∑xi∈R2(j,s)(yi−c2^)2]

其中c1^=avg(yi|xi∈R1(j,s)),c2^=avg(yi|xi∈R2(j,s))

选择训练平方误差最小的属性作为当前划分属性。

回归树的生成步骤与C4.5类似,只是回归树采用平方误差作为选择划分属性依据。

分类树:

分类树则采用基尼指数来选择划分属性及划分点。

设D为数据集,pi 为y中第i个类所占的样本比例。则数据集的基尼指数定义为:

Gini(D)=∑i=1K∑i′≠ipipi′

已知二元属性X时,数据集的基尼指数定义为:

Gini(D|X)=∑k=12|Dk||D|Gini(Dk)

对于连续属性,选择最佳切分点对应的基尼指数作为该属性的基尼指数。选择基尼指数最小属性为划分属性。

分类树的生成步骤也与C4.5类似,只是分类树在选择划分属性时以基尼指数为依据。

在处理缺失值时,CART采用和C4.5相同的做法。

剪枝:

大多数决策树模型都存在过拟合的风险。剪枝(pruning)是降低过拟合风险的一种很好的策略。根据剪枝时间点的不同,可将剪枝分为预剪枝(prepruning)和后剪枝(postpruning)。

1.预剪枝:

预剪枝是在树模型构建的过程中利用测试集预测精度进行剪枝。每次划分一个新结点时,对比划分前后在测试集上的预测精度,若精度提升则划分,否则不划分。

2.后剪枝:

后剪枝是在树模型构建完成后利用测试集预测精度进行剪枝。先生成一棵完整的决策树,从底层非叶结点开始,若将该结点替换成叶结点可以提升预测精度则剪枝,否则不剪。逐层往上比较,直至比较过根节点。

两种剪枝法的优缺点:

预剪枝:

降低过拟合风险,由于某些结点的后续分支在训练前就被剪掉,因此可以显著减少训练时间,但是也正是由于后序分支的预测精度未被比较就剪掉了,存在这种情况:虽然当前结点泛化性能差,但是后序分支的泛化性能却极好。预剪枝忽略了这些好的情况,所以存在欠拟合的风险。

后剪枝:

欠拟合风险小,泛化能力往往优于预剪枝。但是训练时间开销比未剪枝和预剪枝大。

对比总结:

1.划分属性的选择依据上来说:

ID3采用信息增益作为选择依据

C4.5采用信息增益比作为选择依据

CART采用平方误差和基尼指数

2.属性值的适用范围来说:

ID3只适用于离散属性

C4.5和CART适用于离散和连续属性

3.对缺失值处理来说:

ID3简单地忽略缺失值,因此对缺失值敏感

C4.5和CART采取对含缺失值样本加权的做法把样本划分到所有子节点。因此对缺失值不敏感。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习 决策树