我们日常使用的集成学习算法,如随机森林、GBDT和XGBoost等树形结构模型所依托的基础模型就是决策树,那么什么是决策树,具体是如何实现的,为什么人们使用决策树,将在这篇笔记中得到介绍。
1. What is decision tree?
决策树(decision tree),一种有监督的分类与回归方法。
分类决策树:基于特征对实例进行分类,可以看作是if-then规则的集合,也可看作定义在特征空间与类空间上的条件概率分布。输出结果为具体类别,用于处理离散型变量。
回归决策树:输出结果为确定数值,用于处理连续性变量。
1.1. 模型结构
树形结构,一般地,一棵决策树包含一个根节点、若干个内部节点和若干个叶节点。
node + directed edge
node:
- root node 表示样本全集
- internal node 表示一个特征或属性上的判断
- leaf node表示一个分类结果
1.2. 三个步骤:特征选择,决策树生成,决策树修剪
1.2.1. 特征选择:
选择最优的划分属性,即从当前数据集的诸多特征中选择一个特征作为当前节点的划分标准。 随着划分不断进行,希望决策树的分支节点包含的样本尽可能属于同一类别,即节点纯度越来越高。
1.2.2. 决策树生成
逐层递归地应用启发式算法进行特征选择,并迭代构建决策树。
例如分类决策树的一般机制是,从根节点开始对全部实例的一个特征进行考察,其个子节点就是的不同取值所划分的若干组实例,依次类推,我们将当前层的继续考察另一个特征,并根据不同的取值将实例再分成若干组。直到当前节点能给出对实例的最终类别判断,或者在回归任务重给出精确的Label预测结果,即分裂为叶子节点。
过程中,有两个基本操作:
- 节点分裂:如果当前节点所考察的属性不能对当前这组实例给出明确判断时,就分裂成若干节点;
- 阈值选择:分裂依赖对当前属性特征的阈值选择,选择合适的阈值,能够使分裂产生的矛盾尽可能小。
1.2.3. 决策树修剪
由于决策树在学习时追求的是提高对训练集的正确分类,往往会构建出复杂的结构,从而出现泛化能力弱的过拟合现象。
为了防止决策树出现这种过拟合现象,需要对决策树进行简化,这个过程成为剪枝(pruning)。
2. 常用决策树启发式算法
2.1 ID3——最大信息增益
2.1.1. 信息增益
数据集的经验熵:
| 符号 | 意义 |
|---|---|
| 数据集 | |
| 类别数 | |
| 中属于类别的样本子集 | |
| 数据集中样本个数 | |
| 类别的样本子集的样本数 |
特征对的经验条件熵:
| 符号 | 意义 |
|---|---|
| 数据集的某个特征 | |
| 特征的第个取值 | |
| 特征取第个值的的样本子集 |
信息增益:
信息增益可以理解为,引入属性后,的不确定性减少了多少。
2.1.2. ID3算法具体步骤
Input: 训练集,特征集,阈值;
Output: 决策树。
- 若中样本都属于类别,则为单节点树,作为该节点标签。返回
- 若无剩余特征,则为单节点树,中样本量最大的类作为该节点标签。返回
- 若1.2.并未满足,计算中每个特征对的信息增益,选择信息增益最大的特征
- 若信息增益小于,则为单节点树,中样本量最大的类作为该节点标签。返回
- 若4.未满足,对每个可能取值,分割为若干非空子集,将中实例最大的类作为标记,构建子节点(执行6.),由节点及其子节点构成树,返回
- 对第个子节点,以为训练集,以为特征集,递归执行1.~5.操作。返回这颗子树
注意:ID3决策树仅有树的生成,没有剪枝过程,容易产生过拟合。
2.2 C4.5——信息最大增益比
2.2.1. 与ID3的关系
C4.5算法是ID3算法的延伸和优化。
- 信息增益准则对可取值数目较多的属性有所偏好,用信息增益比选择特征,克服了这一不足,但信息增益比对可取值数目较少的属性有所偏好。
- 能够通过连续型的属性进行离散化处理,从而使得决策树能够处理离散型和连续型的属性类型。
- 能够处理具有缺失属性值的训练数据。
- 具有剪枝操作,能够缓解ID3算法中树容易产生的过拟合。
2.2.2. 信息增益比
这里的并非。 注意是指数据集中特征取第个值的样本子集。
通常,属性的可能取值越多,即越大,则的值越大,抵消了对取值多属性的偏好。
但是C4.5也因为这一特点,导致对取值数目少的属性有偏好,为此,C4.5算法不直接选择信息增益率最大的属性,而是先选择信息增益高于平均水平的属性组成候选属性集,再从这个候选集中挑选信息增益率最高的属性。
2.2.3. C4.5算法具体步骤
Input: 训练集,特征集,阈值;
Output: 决策树。
- 若中样本都属于类别,则为单节点树,作为该节点标签。返回
- 若无剩余特征,则为单节点树,中样本量最大的类作为该节点标签。返回
- 若1.2.并未满足,计算中每个特征对的信息增益和信息增益比,选择信息增益最大的特征 (特征筛选可以分两步走,如2.2.2.信息增益比部分所述)。
- 若信息增益小于,则为单节点树,中样本量最大的类作为该节点标签。返回
- 若4.未满足,对每个可能取值,分割为若干非空子集,将中实例最大的类作为标记,构建子节点(执行6.),由节点及其子节点构成树,返回
- 对第个子节点,以为训练集,以为特征集,递归执行1.~5.操作。返回这颗子树
2.2.4. 对连续特征的处理
连续特征进行离散化处理:
- 现有个样本,其连续型特征取值有个,从小到大排列。
- 相邻两样本值的平均数作为划分点,共个,。
- 分别计算这个二元切分点的信息增益比。
- 信息增益比最大的点为该连续特征的最佳切分点,设为。
- 则将的设为类别1,将的设为类别2,从而实现连续特征离散化。
2.2.5. 对缺失值的处理
三种情况:
- 有缺失值的特征如何计算信息增益比?(计算无缺失样本所占比例,信息增益无缺失值样本子集的信息增益;同样信息增益率也类似。)
- 选定划分属性,若样本在该属性上的值有缺失,怎样对样本进行划分?(将样本以不同概率同时划分到不同节点中,概率时根据其他非缺失属性的比例来得到的)
- 对新样本进行分类时,如果测试样本特性有缺失值如何对其进行预测?(走所有分支,计算每个类别的概率,取概率最大的类别赋给该样本。)
2.2.6. 剪枝
剪枝又分为前剪枝和后剪枝
前剪枝Pre-Pruning: 在构造树的过程中,就知道哪些节点可以剪掉。
- 如节点内数据样本数切分最小样本数阈值。
- 所有特征都已被用于之前的分裂中。
- 计算每次分裂对测试集的准确率提升,当小于某个阈值时不再扩展。
上述所涉及到的阈值都依赖于经验判断。所以,虽然前剪枝能够降低过拟合,减少训练时间,但前剪枝所依赖的贪心策略会带来欠拟合风险。
后剪枝Post-Pruning: 构造出完整的决策树之后再来考查哪些子树可以剪掉。
C4.5使用的简直方法为悲观剪枝法。 即根据剪枝前后的误判率来判定是否进行子树修剪,如果剪枝后误判率不变或下降,该子树可被换为叶子节点。
子树带有惩罚因子的误判率为估计为:
| 符号 | 意义 |
|---|---|
| 子树第个叶子节点 | |
| 子树第个叶子节点误差:第个叶子节点的较小类别实例数 | |
| 子树叶子节点个数 | |
| 子树第个叶子节点包含的实例总数 |
子树的叶子节点误判次数均值为:
| 符号 | 意义 |
|---|---|
| 子树覆盖的总共个样本 | |
| 子树带有惩罚因子的误判率为估计 |
子树误判次数标准差:
子树剪枝变为叶子节点的误判率为:
叶子节点的误判次数均值:
如果,则将子树剪枝为叶子节点
2.2.7. C4.5算法的劣势
- 只能用于分类;
- 多叉树比二叉树的效率低;
- 树的生成需要多次对数据集进行多次扫描数据集,对数据集的连续特征取值进行多次排序,效率低;
- 没考虑到条件属性间的相关性,影响到属性选择的正确性;
- 只适用于能够驻留于内存的数据集,训练集过大则无法运行。
2.3 CART——最大基尼指数(Gini)
2.3.1. 与ID3和C4.5的联系
ID3和C4.5算法都是多叉树,构建效率低,并且只能处理分类任务(虽然C4.5能对连续特征离散化处理,但仍然处理的是分类任务)。
CART(classification and regression tree)既可以用于分类也可以用于回归。
分类树输出样本的类别,回归树输出具体预测值。
2.3.2. CART回归树
CART回归树主要凭借误差平方和对属性和划分点进行选拔。
Input: 训练集,特征集;
Output: 决策树。
- 对每个特征,计算每个划分点取值以及其划分的两部分和的误差平方和,通过追求最小误差平方和从而选择对应的最优属性和最优划分点。最小误差平方和如:。其中,为的标签均值,为的标签均值。
- 根据最优特征和最优划分点。和,和。
- 重复执行1.2.,直至满足结束条件。
- 根据划分特征和划分点组成二叉回归树。
2.3.3. Gini指数
CART分类树主要依托Gini指数选拔划分点。
Gini描述数据纯度,与信息熵类似:
而特征的Gini指数:
2.3.4. CART分类树
连续特征离散化,措施与2.2.4. 对连续特征的处理一致,仅仅将最大信息增益比的评选标准换为Gini指数最小即可。
离散特征二分,选择特征中的一个取值作为一个分支,其他取值作为另一个分支。和选择Gini指数最小的搭配即可。
Input: 训练集,特征集;
Output: 决策树。
- 对当前节点实例集中每个特征,计算每个划分点取值以及其划分的两部分和的Gini指数,通过追求最小Gini指数从而选择对应的最优属性和最优划分点。
- 根据最优特征和最优划分点将训练集分配到两个子节点中。
- 重复执行1.2.,直至满足结束条件(节点样本个数小于阈值,或样本集Gini指数小于阈值)。
- 根据划分特征和划分点组成二叉分类树。
2.3.5. CART剪枝——CCP算法
CCP(Cost Complexity Pruning)算法
从根节点开始,考察当前决策树中每一个节点为root的子树,计算裁剪为叶子节点时,训练集上的误差增加率:
| 符号 | 意义 |
|---|---|
| 剪枝后结点的误差,即如果没有在结点经历划分,将当作叶子结点的较小类样本数量和。 | |
| 未剪枝时子树的误差,的每个叶子结点较小类的样本数之和。 | |
| 子树的叶子结点数。 |
2. Why do people need decision tree?
Simple, easy-to-tune, often gives satisfied results.
当我们拿到一套数据时,首先应该建立树模型,因为树形结构的模型训练算法简单,且没有太多超参数可以调整,导致犯错的可能性也小,最后还可以得出一个还不错的甚至可以上线的结果。