决策树剪枝及数据处理
一、核心决策树算法(3 类主流算法)
1. ID3 算法:用 “信息增益” 选属性
ID3 是决策树的 “开山鼻祖” 之一,它的核心逻辑是 “选能让数据最‘纯’的属性”—— 这里的 “纯” 用 “信息增益” 衡量。
简单说,“信息增益” 就是 “划分前的混乱度(熵)减去划分后的混乱度”,增益越大,说明用这个属性划分后,数据从 “杂乱无章” 到 “类别分明” 的提升越明显。
比如 PPT 里的例子:用 “天气、温度、湿度、是否多云” 这 4 个属性,预测 “是否出去玩”。ID3 会计算每个属性的信息增益,选增益最大的那个先划分(比如先按 “天气” 分,再按 “温度” 分)。但 ID3 有个明显的缺点:偏爱 “取值多的属性”。比如如果数据里有 “编号” 这种每个样本都不同的属性,ID3 会觉得它的信息增益最大(毕竟每个编号对应一个样本,划分后完全 “纯”),但这显然没意义 —— 相当于用 “身份证号” 做决策,对新数据毫无泛化能力。
2. C4.5 算法:用 “信息增益率” 补坑
为了修复 ID3 的 bug,C4.5 算法横空出世。它在 “信息增益” 的基础上,加了一个 “属性自身的熵” 作为分母,得到 “信息增益率”。
为什么这么做?因为取值多的属性,自身的熵通常更大,除以它之后,就能平衡对 “多取值属性” 的偏好。比如 “编号” 的信息增益高,但自身熵也极高,算出来的增益率反而可能很低,这样就不会被误选为划分属性了。PPT 里还是用 “是否出去玩” 的数据集,C4.5 会通过信息增益率,避开不合理的属性,选出更有实际意义的划分依据(比如优先选 “天气”,而不是 “编号”)。
3. CART 算法:用 “基尼指数” 兼顾分类与连续值
CART 算法更灵活,它既能做分类,也能做回归,这里我们先看分类场景。它用 “基尼指数” 衡量数据纯度:基尼指数越小,说明数据越纯(比如随机从数据里抽两个样本,类别不一样的概率越低)。
最实用的是,CART 能处理 “连续值” 属性 —— 比如 PPT 里的 “应税收入”(125K、100K、70K…),它会用 “贪婪算法” 先给连续值排序,再找最优分界点(比如把 “应税收入” 分成 “≤97.5K” 和 “>97.5K”),本质就是把连续值 “离散化”,再按分类逻辑划分。这一点比 ID3 和 C4.5 更贴近真实数据(毕竟现实中很多特征是连续的,比如年龄、身高)。
二、决策树剪枝策略(解决过拟合)
剪枝原因
决策树理论上能完全分割数据,但易因 “过度贴合训练数据” 导致过拟合,需通过剪枝降低复杂度、提升泛化能力。
1. 预剪枝:边建边剪,高效实用
预剪枝的思路很直接:在构建决策树的过程中,就提前设定 “停止条件”,不让树长太 “胖”。
比如设定 “树的最大深度不超过 10”“叶子节点至少有 5 个样本才继续划分”“信息增益小于 0.1 就不划分”—— 这些条件能从源头限制树的复杂度,避免过拟合。
预剪枝的优点是 “高效”,不用等树建完再改;缺点是可能 “剪太狠”,导致欠拟合(树太简单,没学到足够的规律),所以参数需要反复调试。
2. 后剪枝:先建全树,再 “砍枝”
后剪枝则是 “先把树建完整,再回头看哪些分支没必要”。它的核心是 “计算损失”:
最终损失 = 分支自身的基尼系数(拟合效果) + α× 叶子节点数量(复杂度)
这里的 α 是 “平衡系数”:α 越大,越看重简化树(减少叶子节点),越能避免过拟合;α 越小,越看重拟合效果,可能保留更多分支。判断是否剪枝的关键是 “验证集精度”。
后剪枝的优点是 “效果更稳”,不容易欠拟合;缺点是 耗时
三、实践
参数名 | 作用说明 |
---|---|
criterion | 选择纯度衡量标准:gini (基尼指数)、entropy (信息熵) |
splitter | 选择切分点方式:best (全特征找最优)、random (部分特征找,适合大数据) |
max_features | 划分时考虑的最大特征数:None(用全部)、sqrt(根号下总特征数)、log2 等 |
max_depth | 树的最大深度:推荐 5-20,太深易过拟合,太浅易欠拟合 |