在上一篇中,我们已经理解了,决策树,本质上是一套结构化的判断流程。它看起来像流程图,也很像一个经验丰富的业务人员在一步一步做决策。

但还有一个更深的问题:这棵树,是谁画出来的?答案是没有人设计它,它是自己长出来的。

而它成长的规则,其实非常简单:每一步,都选择“最有信息量”的那个问题。

这就是今天要讲的:决策树学习(Decision Tree Learning)。

一个案例

假设你在做一个用户是否会投诉的预测模型,数据可能长这样: 

最近是否延迟发货
是否联系客服
是否退款过
是否投诉
是
是
是
是
否
否
否
否
是
否
否
否
否
是
是
是

现在问题来了——第一个应该问什么问题? 比如是否退款过?还是是否联系客服?还是是否延迟发货?

这不是随便选的。而是哪个问题,能让数据变得最“清晰”。

决策树的核心原则:让数据变得更“纯”

想象两种情况:

情况A:

CODE
10个用户
5个投诉
5个不投诉

这是非常混乱的情况。

情况B:

CODE
10个用户
9个投诉
1个不投诉

这是比较清晰的情况。 

决策树的目标就是:让每一个节点,尽可能只包含一种结果。

在算法里,这个概念叫:纯度(Purity),而衡量“混乱程度”的指标叫:熵(Entropy)。

什么是熵?

熵,就是一组数据有多混乱。

比如上面的案例中:

投诉
不投诉
熵
5
5
高
9
1
中
10
0
低

你会发现一个规律——越接近50% : 50%,越混乱 

这正是熵的特性: 

CODE
50% / 50% → 最混乱
100% / 0% → 最纯

真正决定分裂的,不是熵,而是信息增益

现在我们知道:熵是混乱程度。但决策树真正关心的是:这个问题,能减少多少混乱?这就是:信息增益(Information Gain)。

CODE
信息增益 = 分裂前的混乱 − 分裂后的混乱

如果一个问题能让数据变得更清晰,就是一个好问题,决策树就会选择它。

假设当前有:

CODE
10个用户
5个投诉
5个不投诉

现在有两个候选问题:

问题1:是否退款过?分裂后:

CODE
退款过:4 投诉,1 不投诉
没退款:1 投诉,4 不投诉

非常清晰。

问题2:是否男性? 分裂后:

CODE
男性:3 投诉,2 不投诉
女性:2 投诉,3 不投诉

依然混乱。 

所以:决策树一定会选是否退款过,因为它带来的信息增益更大。

整棵树是如何一步一步长出来的?

决策树学习算法的流程其实非常机械:

CODE
Step 1 从所有数据开始(根节点)
Step 2 计算每个特征的信息增益
Step 3 选择信息增益最大的特征
Step 4 分裂数据
Step 5 对每个子节点重复这个过程
Step 6 直到满足停止条件

这就是一个典型的递归(Recursive)过程,即用同一套规则,不断重复自己。

什么时候停止继续分裂?

这是一个非常关键的问题。

如果不停分裂,会发生过拟合(Overfitting),所以必须设置停止条件。

常见停止规则包括:

1)所有数据属于同一类别

2)树的深度达到上限

3)信息增益太小

4)样本数量太少

这些规则本质上是在回答一个问题:再问下去,还有意义吗?

如果特征不是“是 / 否”,而是数字怎么办?

假设有些情况下,比如:

CODE
用户等待时间 = 12 分钟

这不是:是 / 否,而是连续数值,这时候决策树会做一件非常聪明的事情——自动寻找一个“分界线”。

例如:等待时间 ≤ 10 分钟 或 等待时间 ≤ 15 分钟。算法会尝试多个阈值,计算信息增益并选择最好的那个。比如:

CODE
≤ 8 分钟 → 信息增益 0.24
≤ 9 分钟 → 信息增益 0.61
≤ 13 分钟 → 信息增益 0.40

最终选择:≤ 9 分钟,因为它带来的信息增益最大。

一个最小可运行的决策树代

下面是一个非常接近真实项目的示例: 

CODE
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(
    max_depth=4,
    min_samples_split=20
)
model.fit(X_train, y_train)
prediction = model.predict(X_test)

这里有两个最重要的参数: 

CODE
max_depth
控制树最多能长多深
CODE
min_samples_split
控制至少多少数据才允许继续分裂

这两个参数,本质上就是防止模型过拟合。


决策树不是在寻找最复杂的规则,而是在寻找最有区分力的问题。它不像神经网络那样依赖大量计算,也不像线性模型那样依赖数学形式。

它更像一个优秀的产品经理:不断问问题,直到问题本身把答案带出来。

在真实的机器学习项目里,很少有哪一个模型,是从一开始就设计正确的。它往往是从一片混乱的数据中出发,尝试一次分裂,观察结果,再尝试下一次分裂,逐步逼近一个更清晰的结构。

在这个意义上,决策树其实教会我们的,并不是如何预测数据,而是如何面对不确定性——不是急于给出结论,而是一步一步,让结论自己浮现。

附录:本文涉及的专有名词中英文对照(标红为最核心)

中文术语
英文术语
说明
决策树学习
Decision Tree Learning
决策树自动生成分裂规则的过程
熵
Entropy
衡量数据有多混乱的指标(越乱越高)
纯度
Purity
一个节点中数据是否足够一致
信息增益
Information Gain
一个问题能让数据变得更清晰的程度
分裂
Split
根据某个条件把数据分成子集
阈值
Threshold
连续变量的分界线(如:等待时间 ≤ 10 分钟)
递归
Recursion
用同一规则不断重复构建子树的过程
停止条件
Stopping Criteria
决定什么时候不再继续分裂