决策树学习(2)
一、决策树概述
决策树是机器学习中一种常用的分类算法,通过对数据特征的逐步划分来构建树状模型,实现对数据类别的预测。本次学习主要围绕 ID3、C4.5、CART 三种经典决策树算法展开,同时涉及了连续值处理、剪枝策略及代码实现等内容。
二、经典决策树算法
(一)ID3 算法
核心思想:以信息增益作为划分属性的选择标准。
信息增益:某个属性带来的熵增,信息增益越大,使用该属性划分所获得的 “纯度提升” 越大。
缺点:对可取值数目较多的属性有所偏好,例如在包含 “编号” 这类属性的数据集中,可能会将 “编号” 选为最优划分属性,而这显然不合理。
示例数据: |ID | 天气 | 温度 | 湿度 | 是否多云 | 是否出去玩 | |---|---|---|---|---|---| |1 | 晴 | 高 | 高 | 是 | 是 | |2 | 阴 | 适中 | 高 | 是 | 否 | |3 | 雨 | 高 | 正常 | 否 | 否 | |4 | 雨 | 适中 | 正常 | 否 | 是 | |5 | 阴 | 高 | 高 | 是 | 是 | |6 | 晴 | 低 | 正常 | 否 | 是 | |7 | 阴 | 低 | 正常 | 是 | 是 |
(二)C4.5 算法
改进点:为解决 ID3 算法对多值属性的偏好问题,引入信息增益率作为划分标准。
信息增益率:信息增益 ÷ 自身熵。
示例数据:同 ID3 算法的示例数据,通过计算信息增益率来选择更合适的划分属性。
(三)CART 算法
划分标准:使用基尼指数。
基尼指数:反映了从数据集 D 中随机抽取两个样本,其类别标记不一致的概率。公式为\(Gini(D) = 1-\sum_{k=1}^{}P_k^2\)(其中\(P_k\)为各类别在数据集中的概率)。\(P_k\)越大,Gini (D) 越小,数据集 D 的纯度越高。
三、连续值处理
当遇到连续值属性时,可采用贪婪算法进行处理,步骤如下:
排序:将连续值进行排序。
确定分界点:若进行 “二分”,对于有 n 个不同值的连续属性,可能有 n-1 个分界点。
离散化:通过选择合适的分界点,将连续值进行离散化处理。例如,将 Taxable Income 属性的取值 60、70、75、85、90、95、100、120、125、220,可分割成 TaxIn<=80 和 TaxIn>80,或 TaxIn<=97.5 和 TaxIn>97.5 等。
四、决策树剪枝策略
(一)剪枝原因
决策树过拟合风险很大,理论上可以完全分得开数据,需要通过剪枝来提高模型的泛化能力。
(二)预剪枝
定义:边建立决策树边进行剪枝的操作,更具实用性。
剪枝方式:通过限制深度、叶子节点个数、叶子节点样本数、信息增益量等方式进行剪枝。
(三)后剪枝
定义:当建立完决策树后来进行剪枝操作。
衡量标准:最终损失 = 自身的 GINI 系数值 +α× 叶子节点数量。
α 越大,模型越不容易过拟合,但结果可能没那么好。
α 越小,更注重结果的好坏,但过拟合可能没那么重要。
示例:原分支 “色泽 =?” 验证集精度剪枝前为 57.1%,剪枝后为 71.4%,决策剪枝;原分支 “纹理 =?” 验证集精度剪枝前为 42.9%,剪枝后为 57.1%,决策剪枝。
五、决策树代码实现
使用DecisionTreeClassifier()
创建决策树模型,主要参数如下:
参数 | 说明 |
---|---|
criterion | 可选 gini(基尼系数)或者 entropy(信息熵) |
splitter | 可选 best(在所有特征中找最好的切分点)或者 random(在部分特征中找切分点) |
max_features | 可选 None(所有特征)、log2、sqrt、N 等 |
max_depth | int 或 None,可选(默认 None),设置决策树的最大深度,深度越大越容易过拟合,推荐在 5-20 之间 |