决策树算法详解
一、引言
决策树是机器学习中一种常用的分类算法,其核心思想是通过对数据特征的逐步划分,构建一棵类似树状的决策模型,从而实现对数据类别的预测。本文将详细介绍决策树的几种主要算法(ID3、C4.5、CART)、连续值处理方法、剪枝策略以及代码实现相关内容。
二、决策树主要算法
(一)ID3 算法
ID3 算法以信息增益作为划分属性的选择依据。信息增益指的是某个属性带来的熵增,信息增益越大,意味着使用该属性进行划分所获得的 “纯度提升” 越大。
不过,ID3 算法存在一定局限性,其信息增益准则对可取值数目较多的属性有所偏好,例如在包含 “编号” 这类属性的数据集中,可能会将 “编号” 选为最优划分属性,而这在实际应用中往往没有意义。
如下表是一个用于判断是否出去玩的数据集,ID3 算法会基于各属性的信息增益来决定划分顺序:
ID | 天气 | 温度 | 湿度 | 是否多云 | 是否出去玩 |
---|---|---|---|---|---|
1 | 晴 | 高 | 高 | 是 | 是 |
2 | 阴 | 适中 | 高 | 是 | 否 |
3 | 雨 | 高 | 正常 | 否 | 否 |
4 | 雨 | 适中 | 正常 | 否 | 是 |
5 | 阴 | 高 | 高 | 是 | 是 |
6 | 晴 | 低 | 正常 | 否 | 是 |
7 | 阴 | 低 | 正常 | 是 | 是 |
(二)C4.5 算法
为了改进 ID3 算法对可取值数目较多的属性的偏好问题,C4.5 算法引入了信息增益率。信息增益率的计算方式为信息增益除以该属性自身的熵。
同样针对上述判断是否出去玩的数据集,C4.5 算法会通过计算信息增益率来选择更合适的划分属性,减少了对多取值属性的偏向。
(三)CART 算法
CART 算法使用基尼指数来衡量数据集的纯度。基尼指数 Gini (D) 反映了从数据集 D 中随机抽取两个样本,其类别标记不一致的概率。计算公式为\(Gini(D) = 1-\sum_{k=1}^{}P_k^2\),其中\(P_k\)是数据集 D 中第 k 类样本所占的比例。\(P_k\)越大,Gini (D) 越小,数据集 D 的纯度越高。
三、连续值处理方法
在实际数据中,经常会遇到连续值特征,对于连续值的处理,通常采用贪婪算法来选取合适的分界点,具体步骤如下:
- 对连续值进行排序;
- 考虑所有可能的二分分界点,例如对于排序后的 60、70、75、85、90、95、100、120、125、220,可能有 9 个分界点;
- 选择最优的分界点进行划分,这一过程实际上就是 “离散化” 过程。如可以将 TaxIn 分割成 TaxIn<=80 和 TaxIn>80,或者 TaxIn<=97.5 和 TaxIn>97.5 等。
四、决策树剪枝策略
由于决策树过拟合风险很大,理论上可以完全分得开数据,因此需要进行剪枝操作。剪枝策略主要有预剪枝和后剪枝两种。
(一)预剪枝
预剪枝是边建立决策树边进行剪枝的操作,更加实用。其主要通过限制一些参数来实现剪枝,如限制树的深度、叶子节点个数、叶子节点样本数、信息增益量等。
(二)后剪枝
后剪枝是当建立完决策树后再进行剪枝操作。其衡量标准为:最终损失 = 自身的 GINI 系数值 +α× 叶子节点数量。其中,α 的大小会影响剪枝效果:
α 越大,越不容易过拟合,但结果可能没那么好;
α 越小,更注重结果的好坏,过拟合可能没那么重要。
例如在对瓜的好坏进行判断的决策树中,针对 “色泽 =?” 的分支,剪枝前验证集精度为 57.1%,剪枝后为 71.4%,因此选择剪枝;针对 “纹理 =?” 的分支,剪枝前验证集精度为 42.9%,剪枝后为 57.1%,也选择剪枝。
五、决策树代码实现
在 Python 中,可以使用DecisionTreeClassifier()
来创建一个决策树模型,其主要参数如下:
criterion:可选择 gini(基尼系数)或者 entropy(信息熵);
splitter:可选择 best(在所有特征中找最好的切分点)或者 random(在部分特征中找切分点);
max_features:可设置为 None(使用所有特征)、log2、sqrt、N 等;
max_depth:int 或 None,可选(默认 None),用于设置决策树的最大深度,深度越大越容易过拟合,推荐在 5-20 之间。
六、课堂练习
使用决策树对泰坦尼克号幸存者进行预测,通过实际操作来加深对决策树算法的理解和应用。
综上所述,决策树算法通过不同的划分准则、连续值处理方法和剪枝策略,能够有效地处理分类问题,在实际应用中具有广泛的用途。