决策树
定义
根据wikipedia的定义,决策树学习方法是一种通过决策树实现从某几个特征属性(分枝)到目标值(叶节点)的预测模型。
一种实现方法是贪心算法:数据源按照属性测试条件分割为子集,然后在生成的每个子集上递归执行递归分割过程,直到该节点所有子集具有相同的目标变量。
用途:
- 分类/回归模型
- 用于特征选取。基于属性测试条件(Attribute value tests)最优结果是数据集的强相关特征的原理。
算法【ID3/C4.5/CART】
算法要解决的问题是:选取什么变量以及用什么值拆分数据集。
算法的结束条件:继续拆分的效果不佳或者超过最大深度,或者子集纯度足够,或者子集的量太少了。-《Machine_Learning_-_A_Probabilistic_Perspective》
ID3
- 流程
《机器学习实战》第三章对ID3算法进行了详细的介绍,ID3算法的主要流程是:
-
具体内容
具体地,
1、构造决策树时,首先需要解决的是当前数据集上哪个变量在拆分数据分类时起决定性作用。为了确定划分数据集的最佳变量,按照变量标签循环计算拆分前后熵增益,比较得到最大增益对应的变量;
2、完成拆分后,数据子集中某一分支的数据属于同一类型,则无需进一步对数据集进行拆分,否则需要重复拆分数据子集直至所有相同类型数据均在同一数据子集中。
对应的伪代码如下:
-
属性测试条件的选取:
度量方式是信息增益 -
算法不足:
- 切分过于迅速
- 不能直接处理连续型特征变量
- ID3采用信息增益大的特征优先建立决策树的节点
- ID3算法没有考虑缺失值情况
- 没有考虑过拟合的问题
C4.5
- 针对ID3算法的改进
- 对于连续型特征变量,采用排序后的相邻两数均值结果作为二拆分节点,利用最佳熵增益比作为判断指标,将连续的特征离散化。另:选择该连续变量作为拆分节点,该属性后面还可以参与子节点的产生选择过程。
- 采用信息增益比改进特征选取依据
- 对于缺失值处理的问题,主要需要解决的是两个问题,一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的处理。
- 对于过拟合问题,C4.5引入了正则化系数进行初步的剪枝
- 流程
-
属性测试条件的选取:
度量方式是信息增益比 -
算法不足:
- 必须剪枝
- 多叉树的运行效率比二叉树低
- C4.5只能用于分类,不能处理回归问题
- C4.5针对连续值选取特征变量时需要排序和大量对数运算(熵模型),模型较复杂
CART
- 针对C4.5算法的改进
- 二分离形成二叉树
- 针对回归问题,采用总方差代替熵模型,处理连续值的离散化;另外输出值是最终叶子的均值或中位数(回归树)、线性模型系数(模型树)
- 为了降低运算复杂度,采用基尼不纯度代替熵模型。
- 流程
- 关于剪枝
- 从原始决策树生成各种剪枝效果的决策树;
- 交叉验证各种剪枝的泛化预测能力,度量剪枝前后损失的指标根据模型种类确定:针对回归树,采用总方差作为评价指标,针对分类树,采用基尼不纯度作为评价指标。
-
属性测试条件的选取:
《机器学习实战》中回归树/模型树的度量方式是总方差
《统计学习方法》中的度量方式是基尼不纯度 -
算法不足:
- 样本的一点点改动会导致树结构的剧烈改变—>集成学习解决
- 准确度较低
CHAID
待学习
剪枝
剪枝是决策树学习算法对付过拟合的主要手段。剪枝的依据是剪枝后能否有效提高模型泛化性能,如果能则进行剪枝,否则保留。基本策略包括预剪枝和后剪枝。
- 预剪枝是在树生成过程(以训练集生成树)对每个节点进行判断,当且仅当划分后模型的泛化性能(在验证集上的性能)提升才确定划分。
- 后剪枝是在训练集上生成完整的树,然后自底向上对各内部节点进行判断,当且仅当划分后模型的泛化性能(在验证集上的性能)提升才确定划分。
泛化性能和验证集就设计到模型性能评估方法,
决策树算法小结
- 首先我们看看决策树算法的优点:
1)简单直观,生成的决策树很直观。
2)基本不需要预处理,不需要提前归一化,处理缺失值。
3)使用决策树预测的代价是O(log2m)。 m为样本数。
4)既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
5)可以处理多维度输出的分类问题。
6)相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释
7)可以交叉验证的剪枝来选择模型,从而提高泛化能力。
8) 对于异常点的容错能力好,健壮性高。- 我们再看看决策树算法的缺点:
1)决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
2)决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。
3)寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。
4)有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
5)如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。