机器学习基础

决策树:会问问题的模型

14 分钟

前两章讲的线性回归、感知机、多层网络,都是「算一个加权和」的思路。这一章讲另一条完全不同的路线:通过一连串提问来做判断。


决策树就是一串 if-else

判断一个人会不会买某款手机:

预算 > 3000 ?
├─ 是 → 看重拍照 ?
│      ├─ 是 → 买
│      └─ 否 → 再看性能需求...
└─ 否 → 不买

每个内部节点问一个问题,每条边是一个答案,每个叶子给一个结论。 这就是决策树的全部。

它和神经网络最大的区别:你能直接读懂它。 一棵训练好的决策树可以打印出来给人看,每一步判断都有明确含义——这叫可解释性,在医疗、金融、风控这些「必须说清楚为什么」的场景里,比准确率更重要。


关键问题:先问哪个问题?

树的形状取决于「每一步选哪个特征来切分」。选得好,几步就分干净;选得差,树又深又乱。

衡量标准:切完之后,数据变「纯」了多少。

什么叫纯?一堆样本如果全是同一类,就是最纯(不确定性为 0);如果各类各占一半,就是最不纯。

用信息熵度量不确定性

  • 10 个样本全是「买」:(毫无不确定性)
  • 5 个买 5 个不买:(最不确定)

信息增益 = 切分前的熵 − 切分后的加权平均熵。 增益越大,说明这一刀切得越有价值。

算法就是:每一步,试遍所有特征,选信息增益最大的那个来切。 这就是 ID3 算法的核心。


三种常见的切分标准

标准 算法 特点
信息增益 ID3 偏爱取值多的特征(如「身份证号」会被误选)
信息增益率 C4.5 除以特征本身的熵,修正上面的偏好
基尼不纯度 CART 计算更快,sklearn 默认用它

基尼不纯度。含义和熵接近,但不用算对数,速度快。


决策树的两个天然优势

  1. 不需要特征缩放。 线性模型和神经网络要求把特征归一化(否则量纲大的特征会主导),决策树完全不用——它只关心「大于还是小于某个阈值」。
  2. 天然处理类别特征和缺失值。 「颜色是红/蓝/绿」可以直接切,不用做独热编码。

这两点让它在表格数据上极其好用——现实里大量业务数据就是表格。


代码只有三行

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(criterion='gini', max_depth=4)
clf.fit(X_train, y_train)

max_depth=4 这个参数很关键——下一节讲为什么必须限制树的深度。

练习:手算一下——10 个样本中 8 个正例 2 个负例,它的信息熵是多少?(提示:,约 0.72)

小纸条

决策树选择切分特征的依据是什么?相比线性模型和神经网络,它有哪两个不需要做的预处理?

登录 后可看答案