信息增益原则有缺陷,即其倾向于情况更多的特征。但多数情况下,这种特征过于细致,不能真正表达特征与类别的关系,容易过拟合。
这种特征有一个共同点,即本身的取值比较多,也就是特征本身的信息熵较大。因此,通过改进,得到信息增益比原则。数学形式如下:
$InfoGainRatio(X,F) = InfoGain(X,F) / H(F)$
(3)基尼系数原则
基尼系数依旧是用来度量集合中样本类别纯度的方法。数学含义是:在一个集合中任意取出两个样本,其不属于同一类的概率。
基尼系数的计算公式:
$Gini(S) = 1 - \sum _{i}p_{i}^{2}$
其中,pi为取到的样本为第i类的概率。
集合越“纯”,即类别越单一,取到同一样本的概率就越大,基尼系数越小。所以,我们更加倾向于选择分裂之后基尼系数的加权和最小的划分方式。作为决策树特征选择的基尼系数公式为:
$GiniInd(N,a) = \sum _{i=1}^{k}\frac{|N_{i}|}{|N|}Gini(N_{i})$
其中,N为节点分裂前的集合;Ni为分割成的子集合;a为用来分裂的特征。最终的目标特征式为:
$a^{*} = arg min GiniInd(N,a)$
3 剪枝策略
剪枝是防止决策树模型过拟合的策略之一。于决策树而言,模型的复杂度是分支的多少。剪枝操作就是将无益于模型泛化能力提高的节点分支“剪掉”。
抛出一个问题。如何判断有益还是无益?答案是 基于验证集的检验来判断是否剪枝的。
剪枝的具体操作如下:
对于一个节点来说,如果分裂后比分裂前在验证机上表现得更好,那么就允许这个节点分裂,形成“树枝”;反之,如果一个节点在分裂后反而在验证集上的表现更差了,那么就不希望这个节点分裂,就需要把已经分裂的“树枝”进行“剪枝”,避免模型的泛化能力下降。
剪枝分为预剪枝和后剪枝。
预剪枝:选择特征分裂节点过程中,如果判断一个节点需要剪枝,那么就直接不对该节点进行分裂。(缺点,可能错失更优解)
后剪枝:先分裂,得到一棵完整的决策树后,再考察每个节点,对需要剪枝的节点进行剪枝处理。(缺点,计算量大很多)
4 常用决策树模型
(1)ID3算法
ID指的是Iterative Dichotomister ,即迭代二分法。
①如果集合(节点)无法划分或无须划分,则返回该节点。其中,无法划分的用样本数最多的类别表示该节点预测类别,无须划分的用样本的类别表示该节点预测类别,否则转入步骤②。
②计算现有集合(节点)的信息熵。对于所有的特征,分别计算以其为划分标准所得的子集的信息熵(各个子集加权平均),选择能使信息增益最大的特征。
③如果信息增益大于设定的阚值,那么选择该特征分裂节点,并转入步骤④,否则返回该节点。
④对于分裂得到的各个子集(子节点),重复步骤①-③。
(2)C4.5算法(ID3的改进)
①如果集合(节点)无法划分或无须划分,则返回该节点。其中,无法划分的用样本数最多的类别表示该节点预测类别,无须划分的用样本的类别表示该节点预测类别,否则转入步骤②。
②计算现有集合(节点)的信息熵。对于所有的特征,分别计算以其为划分标准所得的子集的信息熵(各个子集加权平均)及特征本身的信息熵,选择能使信息增益比最大的特征。
③如果信息增益大于设定的阚值,那么选择该特征分裂节点,并转入步骤④,否则返回该节点。
④对于分裂得到的各个子集(子节点),重复步骤①-③。
5 多变量决策树
基本思想:在每个节点都用多个特征共同参与决策。
具体实现:在每个节点用一个线性分类器代替单一属性的阈值。
6 代码实现
决策树预测鸢尾花数据集