决策树(decision tree)遵循“分而治之”(divide-and-conquer)策略,目的为了产生一棵泛化能力强的决策树。
三类情况会递归返回:
-
1.当前节点所有样本属于同一类;
-
2.当前属性集为空,无法划分,标记为当前结点最多的类;
-
3.当前节点样本为空,标记为父节点最多的类
“信息熵”(information entropy)定义为
其中$p_k$表示样本集合中D中第k类样本所占的比例,Ent(D)的值越小,D的纯度越高。
“信息增益”(information gain)根据不同分支节点的样本数不同赋予不同的权重
信息增益越大,说明使用属性a划分获得的“纯度提升”越大,所以选择属性可以通过下面的公式来得到
信息增益对取值数目较多的属性有所偏好,为了减少这种偏好带来的影响,使用“增益率”(gain ratio)来选择最优划分属性。
其中
需要注意的是,增益率准则对可取数目较少的属性有所偏好。
CART决策树使用“基尼指数”(Gini index)来选择划分属性,数据集D的纯度可用基尼值来度量
Gini(D)反映了数据集中随机两个样本标定不一致的概率,所以Gini(D)越小,表示数据集D的纯度越高。
属性a的基尼指数定义为
所以我们可以依据使得划分后基尼指数最小的属性作为最优划分属性,即
剪枝(pruning)是决策树学习算法里面对付“过拟合”的主要手段,决策树为了尽可能正确分类训练样本,会将一些训练集自身的特点当做所有数据都具有的一般性质而导致过拟合,所以可以去掉一些分支来降低过拟合的风险。
常见的剪枝策略有“预剪枝”(prepruning)和“后剪枝”(postpruning):
-
(1) 预剪枝实在决策树生成过程中对每个节点在划分前进行估计;
-
(2) 后剪枝是先训练一个完整的决策树,然后自底向上对非叶节点进行考察
最简单的策略是采用二分法对连续属性进行处理,给定样本集D利用连续属性a,假定a在D上出现了n个不同的取值,将这些信息从小到大排序,记为
将区间
$$= \mathop{\max}{t \in T_a} Ent(D) - \sum{\lambda \in {-, + }} \frac{| D_{t}^{\lambda} |}{|D|} Ent(D_{t}^{\lambda})$$
现实任务中会遇到不完整的样本,如果简单放弃不完整样本,对数据造成极大地浪费。
我们需要解决两个问题:(1)如何在属性值确实的情况下进行划分属性选择?(2)给定划分属性,如样本在该属性上的值缺失,如何对样本进行划分?
给定训练集D和属性a,令
$$ \tilde{\rho_k} = \frac{\sum_{x \in \tilde{D}k} w_x}{\sum{x \in \tilde{D}} w_x}$$
我们可以将信息增益的计算式推广为
若样本$x$在划分属性a上的取值已知,直接将其划入对应子结点,且样本权值在子结点保持
单变量决策树分类边界与轴平行(axis-parallel),但是在真实边界比较复杂的时候需要很多段划分才能得到较好的近似,而“多变量决策树”(multivariate decision tree)就能够实现“斜划分”。其不再是针对某个属性,而是针对属性的线性组合进行测试,每个非叶子结点是一个形如