决策树
递归枚举特征与阈值,选择不纯度下降最大的划分,叶节点输出多数类别或均值。
学习前需要掌握
背景与问题
一些关系更适合“先问一个问题,再走到下一条规则”的结构。决策树用轴对齐条件递归划分空间,既能表达非线性,也容易在深层记住噪声。
概念定义
决策树由内部条件节点和叶节点组成。分类树选择使子集更纯的切分,叶子输出类别分布;回归树通常减少平方误差,叶子输出训练目标均值。
直观理解
每次问一个能最大减少混杂的问题,直到剩余样本足够相似,或达到停止条件。
核心原理
对数值特征,候选阈值常在相邻不同取值之间。分类可用 Gini 或熵,增益需用子节点样本比例加权,不能只取两个子节点不纯度的简单平均。训练贪心选择当前最优,不保证整棵树全局最优。
分类叶子中的样本比例常作为概率输出,但小叶子的比例不稳定,也不自动校准。max_depth、min_samples_leaf 和代价复杂度剪枝 ccp_alpha 控制规则复杂度;参数应在训练验证协议内选择。
树通常不依赖标准化,因为单调缩放仍保留取值顺序,但它对样本扰动与相关特征选择可能敏感。单树轴对齐边界表达斜线可能需要很多切分,回归叶子也不擅长超出训练目标范围的线性外推。
四样本树桩的 Gini 下降
- 特征为 1、2、3、4
- 类别为 0、0、1、1
深度为 1 的树选择阈值 2.5,四个构造训练点均得到对应类别。
若阈值为 1.5,左侧一条纯净,右侧三条中混有两类,增益更小。加权可防止把很小纯叶子与大混杂节点错误地等权对待。
训练点全部分对只是这个简单树桩的机制验证。真实数据继续加深会把少数异常点切成专属叶子,因此应查看独立验证与每叶样本数量。
数学表达
核心表达
左右子节点不纯度按样本数量加权;本例使用未加样本权重的分类 Gini。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1明确分类或回归目标及节点不纯度。
- 2枚举候选特征和阈值,选择加权下降最大的切分。
- 3通过叶子规模、深度和剪枝控制容量,并独立验证。
代码对应位置
示例 1四样本树桩的 Gini 下降的最小验证:使用完整构造输入核对四样本树桩的 Gini 下降,输出只表示本例计算。
计算与实现步骤
- 明确分类或回归目标及节点不纯度。
- 枚举候选特征和阈值,选择加权下降最大的切分。
- 通过叶子规模、深度和剪枝控制容量,并独立验证。
代码实现
示例 1
四样本树桩的 Gini 下降的最小验证
example_01.py用途:使用完整构造输入核对四样本树桩的 Gini 下降,输出只表示本例计算。
import numpy as np
from sklearn.tree import DecisionTreeClassifier
x = np.array([[1.], [2.], [3.], [4.]])
y = np.array([0, 0, 1, 1])
model = DecisionTreeClassifier(max_depth=1, random_state=7).fit(x, y)
print(f"threshold={model.tree_.threshold[0]:.1f} root_gini={model.tree_.impurity[0]:.1f}")
print("predictions:", model.predict(x).tolist())
print("leaves:", model.get_n_leaves())代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
使用完整构造输入核对四样本树桩的 Gini 下降,输出只表示本例计算。
y- 目标标签或连续目标值。
model- 组合预处理和估计器的模型对象。
Step 1 · 1–8 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import numpy as np
from sklearn.tree import DecisionTreeClassifier
x = np.array([[1.], [2.], [3.], [4.]])
y = np.array([0, 0, 1, 1])
model = DecisionTreeClassifier(max_depth=1, random_state=7).fit(x, y)
print(f"threshold={model.tree_.threshold[0]:.1f} root_gini={model.tree_.impurity[0]:.1f}")
print("predictions:", model.predict(x).tolist())
print("leaves:", model.get_n_leaves())预期输出或运行结果
threshold=2.5 root_gini=0.5 predictions: [0, 0, 1, 1] leaves: 2
常见错误 · 3 条
- 无限深树
- 特征重要性当因果
- 只凭外观选深度
实际应用
- 表格数据的非线性基线
- 通过可读条件分析局部规则
常见错误
- 无限深树
- 特征重要性当因果
- 只凭外观选深度