决策树的基本学习
一、特征选择:决策树的 “核心骨架”
决策树的质量,首先取决于 “选对特征”—— 毕竟若根节点选了无关紧要的特征,后续分支再精细也无法得到好结果。课堂中重点讲解的 “熵” 与 “信息增益”,正是衡量特征价值的关键工具。 熵作为 “随机变量不确定性的度量”,公式\(H(X)=-\sum p_i \log p_i\)看似抽象,实则可通过实例轻松理解:当数据全为同一类别(如 14 天打球数据中全为 “打球”),\(p_i=1\),熵\(H=0\),说明不确定性为 0;若数据中 “打球” 与 “不打球” 各占一半,\(p_i=0.5\),熵\(H=1\),不确定性达到最大。这意味着,我们构建决策树的目标,本质是通过特征划分,让每个分支的熵 “尽可能减小”,即让分支内的数据类别更 “纯粹”。
信息增益则量化了 “特征划分对不确定性的减少程度”。以 14 天打球数据为例,原始数据集熵为 0.940(9 天打球、5 天不打球),当用 “outlook(天气)” 特征划分时:
- “overcast(阴天)” 分支下 4 天全为 “打球”,熵 = 0;
- “sunny(晴天)” 和 “rainy(雨天)” 分支熵均为 0.971; 结合各分支概率(5/14、4/14、5/14),计算出划分后的总熵为 0.693,信息增益 = 0.940-0.693=0.247。通过对比 “temperature(温度)”“humidity(湿度)”“windy(是否有风)” 的信息增益,最终选择 “outlook” 作为根节点,这一过程完美体现了 “数据驱动选择” 的逻辑。
此外,课堂未深入但实践中必遇的 “增益率” ,也让我意识到特征选择的 “灵活性”:信息增益对 “取值多的特征” 有偏好(如 ID 类特征,每个取值对应一个样本,划分后熵为 0,信息增益极高,但无实际意义),此时需用 “增益率”(在信息增益基础上增加惩罚项)修正;
二、剪枝操作:避免决策树 “过度自我”
初次用训练数据构建决策树时,我曾陷入一个误区:认为 “分支越细、叶子节点越多,模型越精准”。但实际测试时发现,这种 “完整树” 在训练集上准确率极高,在新数据上却频繁出错 —— 这便是 “过拟合”:模型过度学习了训练数据的 “噪声”(如某一天特殊的天气与打球选择),而非通用规律。此时,“剪枝操作” 就成为决策树的 “纠错机制”。
剪枝分为 “预剪枝” 与 “后剪枝”,二者思路截然不同却目标一致。预剪枝是 “防患于未然”:在决策树生成过程中,对每个节点划分前先验证 “划分后模型泛化能力是否提升”—— 若划分后验证集准确率未提高,就停止划分,将当前节点设为叶节点。例如,当用 “是否有脚蹼” 对 “不浮出水面可生存” 的分支进一步划分时,若验证集中 “有脚蹼” 分支既有 “鱼类” 也有 “非鱼类”,且划分后准确率无提升,就可直接将该分支设为叶节点,避免不必要的细分。后剪枝则是 “亡羊补牢”:先构建一棵完整的决策树,再自底向上考察每个非叶节点 —— 若将该节点的子树替换为叶节点(如将 “温度 > 25℃” 和 “温度≤25℃” 两个分支合并为一个叶节点 “非鱼类”),能让验证集准确率提升,就进行剪枝。两种策略各有优劣:预剪枝计算高效,但可能 “欠剪枝”(过早停止划分导致模型简单);后剪枝泛化能力更强,但需先构建完整树,计算成本更高。在实际应用中,常需结合数据规模选择 —— 小数据集可用后剪枝追求精准,大数据集则用预剪枝平衡效率与效果。
总而言之,决策树就类似于流程图,用一系列的问题把数据分到不同的结果,用熵看数据乱不乱,用信息增益看哪个特征能把数据分更清楚,对数据表的作用很大。