ID3:
ID3(Iterative Dichotomiser 3) 是一种基本的决策树算法。它可用于对只含离散属性的样本集的分类任务。ID3每次根据信息增益选择最佳划分属性,基于样本该属性值的不同,把样本划分到不同的子结点。任意两个叶结点包含的样本不重叠,所有叶结点包含的样本构成完整训练样本集。
算法步骤:
1.计算属性集中每个属性对应的信息增益。选择最大信息增益对应的属性为当前结点的分割属性。
2.根据训练样本在分割属性上属性值的不同,把训练样本划分到不同的分支结点中。并从属性集中去掉当前分割属性。
3.判断每个分支结点是否满足终止条件,对每个不满足终止条件的分支结点重复步骤1和2。
终止条件:
- 分支结点中所有训练样本都属于同一类
- 当前属性集为空,或所有训练样本在所有属性上取值相同,则将该结点类别设定为样本最多的类别
- 分支结点为空,则将其类别设定为父节点样本最多的类别
熵、信息增益和信息增益比:
1.熵:
熵表示随机变量的不确定性。熵越大,则随机变量的不确定性越大。对于离散变量,变量的取值可能越多,每个取值的概率越接近,则熵越大。
设
则熵
条件熵
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值,求数据集的熵
(3).已知特征A和y值,求数据集的熵
(4).特征A的信息增益
特征A的信息增益等于已知y值时数据集的熵减去已知特征A和y值时数据集的熵
(5).特征A的信息增益比
特征A的信息增益比等于特征A的信息增益除以特征A已知而y值未知时数据集的熵
其中
ID3的缺点
ID3根据信息增益来选择划分属性。这种策略倾向于选择类别多的属性。直观来说,属性的类别越多,则平均来说每个属性类别下的目标类别越少,不确定性也就越小,该属性类别下的熵也就越小。加权之和也就越小。因此该属性的信息增益也就越大。
举个极端的例子,假设属性A有和样本数量一样的类别数目,即每个样本都有不同的A属性值,根据条件熵的计算公式,划分后的数据集熵为
由于每个满足 A=Aj 的数据集只含一个样本,故根据熵的计算公式,有
所以 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时数据集的熵为
由此可以定义连续值X的信息增益和信息增益比。
值得注意的是,与离散值最多只能一次作为划分属性不同,连续值可以多次作为划分属性。
缺失值处理:
面对缺失值,ID3只是简单的忽略缺失值,而C4.5采取不同的做法。
设定每个样本x的初始权重 wx 为1. 在涉及样本个数或比例的地方都用权重计算。
1.若在计算属性的信息增益比时,某些训练样本在该属性有缺失值:
设
X′
为去除缺失值后属性X的集合,
D′
为去除在属性X下有缺失值的样本后的数据集。则X的信息增益定义为:
2.在划分样本时,若样本在改划分属性下无缺失值,则划入对应子结点,权重不变。若样本在划分属性下有缺失值,则将样本划入所有子结点,并更新权重。设某个子结点中的非缺失样本占所有非缺失样本比例为
r
,则更新该结点中每个缺失值样本的权重为
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,定义两个区域:
则 x(j) 对应的训练平方误差为:
其中 c1^=avg(yi|xi∈R1(j,s)),c2^=avg(yi|xi∈R2(j,s))
选择训练平方误差最小的属性作为当前划分属性。
回归树的生成步骤与C4.5类似,只是回归树采用平方误差作为选择划分属性依据。
分类树:
分类树则采用基尼指数来选择划分属性及划分点。
设D为数据集,
pi
为y中第i个类所占的样本比例。则数据集的基尼指数定义为:
已知二元属性X时,数据集的基尼指数定义为:
对于连续属性,选择最佳切分点对应的基尼指数作为该属性的基尼指数。选择基尼指数最小属性为划分属性。
分类树的生成步骤也与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采取对含缺失值样本加权的做法把样本划分到所有子节点。因此对缺失值不敏感。