决策树 · 深度手册
分类:聚类分类 | 难度:★★☆ 进阶 | 编号:
decision_tree
一、这是什么(一句话用途)
可解释的分类 / 回归(规则提取)
二、核心思想
决策树是少数"白箱"机器学习模型:它像人做判断一样,每次选一个特征、一个切分阈值,把样本分成更"纯"的子集,递归下去直到子集足够纯净或达到深度限制,最终形成一棵 if-then 规则树。最大优点是天然可解释(路径即规则)、无需特征缩放、能处理混合类型特征;缺点是容易过拟合(树过深会记住噪声),且对数据微小变动不稳定。工业上常与集成方法(随机森林、XGBoost)结合。
三、数学原理与推导
对数据集 ,特征 的信息熵:
按特征 取值分成 个子集 ,信息增益:
ID3 选增益最大的特征分裂;C4.5 用增益率 抑制取值多的特征偏置。
CART 用 Gini 不纯度 ,每步二分使 下降最大。递归建树后常以预剪枝(限深、限叶样本数)或后剪枝控制过拟合。叶子节点的类分布即预测。
四、建模 / 求解步骤
- 选最优分裂特征 / 阈值
- 划分样本
- 递归建子树
- 剪枝防过拟合
- 输出规则
五、关键公式速查
信息增益=H(父)−Σ(|D_v|/|D|)H(子);Gini=1−Σp²
六、典型示例
客户是否流失 → 树规则(年龄 / 消费 / 活跃)。
完整算例(数字演示,照着算一遍)
场景:根据 天气(晴/雨)、风力(强/弱) 判断是否 出行(是/否),训练 10 样本。
分裂:先按 风力 分(信息增益最大),弱风节点再按 天气 分。
结论:规则可读——弱风且晴天→出行;强风→不出行。
七、Python 实现示例
import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","decision_tree.csv"))
X = df[["x1","x2","x3"]].to_numpy(dtype=float)
y = df["label"].to_numpy(dtype=float)
# 简化:对每维找最佳单点分裂(信息增益)
def ig(col, y):
def H(v):
p=v.mean(); return -(p*np.log2(p+1e-9)+(1-p)*np.log2(1-p+1e-9))
base=H(y); best=-1; thr=0
for t in np.unique(col):
m=col<=t; h=m.mean()*H(y[m])+(1-m.mean())*H(y[~m])
if base-h>best: best=base-h; thr=t
return best,thr
for i in range(3):
g,thr=ig(X[:,i],y)
print("特征 x%d 最佳分裂阈值=%.2f 增益=%.3f"%(i+1,thr,g))
配套文件:
py_decision_tree.py(需 numpy / pandas;与下方数据集配套练习)
八、MATLAB 实现示例
%% 决策树(单分裂信息增益)示例(MATLAB/Octave)
df = readtable('..\datasets\decision_tree.csv');
X = table2array(df(:,1:3)); y = table2array(df(:,4));
H = @(v) -(mean(v)*log2(mean(v)+1e-9)+(1-mean(v))*log2(1-mean(v)+1e-9));
base=H(y);
for i=1:3
[g,thr]=deal(-1,0);
for t=unique(X(:,i))'
m=X(:,i)<=t; h=mean(m)*H(y(m))+(1-mean(m))*H(y(~m));
if base-h>g, g=base-h; thr=t; end
end
fprintf('特征 x%d 阈值=%.2f 增益=%.3f\n', i, thr, g);
end
配套文件:
m_decision_tree.m(基础 MATLAB / Octave 即可运行)
九、练手数据集(可下载)
3 个特征与二分类标签的 50 组样本。用于计算单特征信息增益、找最佳分裂。
- 字段:x1, x2, x3, label
- 行数:50 行
- 下载:
decision_tree.csv
十、常见误区与避坑清单
- 易过拟合(要剪枝 / 限深)
- 对类别不平衡敏感
- 不稳定(数据微变树变)
十一、结果怎么解读
沿路径即规则;看特征重要性。
十二、常与谁搭配
集成用随机森林。
十三、论文写作技巧(怎么把它写进论文)
把 决策树 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。
1. 动机怎么写(为什么用它而不是别的)
区分你要的是无监督划分(聚类)还是有监督判别(分类)。说明特征维度与样本量,以及为什么选 决策树(如非线性边界用核方法、高维稀疏用线性、需概率输出用贝叶斯)。
2. 结果怎么写(图表与指标)
聚类给散点图着色 + 轮廓系数 / 肘部图;分类给混淆矩阵 + 准确率 / F1 / ROC 曲线。特征重要性图能加分。
3. 可直接套用的写作话术
- 中文模板:针对<问题>,本文采用 决策树 进行可解释的分类 / 回归(规则提取)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
- 英文模板:To address
, we adopt 决策树 to 可解释的分类 / 回归(规则提取). Benefiting from its ability to , it outperforms on .
4. 同类易踩的写作坑
聚类要说明簇数怎么定(不是拍脑袋);分类要交代训练 / 测试划分与交叉验证,避免过拟合误报高精度。
5. 典型论文段落范例(可直接参考 / 改写)
下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。
为揭示客户群体的内在结构,本文采用 决策树 将 1,200 条样本划分为 4 类(轮廓系数=0.61),各类在消费频次与客单价上差异显著,为精准营销提供依据。
To reveal the intrinsic structure of customers, we apply 决策树 to partition 1,200 samples into 4 clusters (silhouette=0.61); the groups differ markedly in purchase frequency and average order value, supporting targeted marketing.
十四、相关手册(延伸阅读)
- 随机森林 · 机器学习
十五、本手册导航
本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。