MCM520 ← 资料站首页 决策树 · 深度手册 打开交互阅读器 →

决策树 · 深度手册

分类:聚类分类 | 难度:★★☆ 进阶 | 编号:decision_tree

一、这是什么(一句话用途)

可解释的分类 / 回归(规则提取)

二、核心思想

决策树是少数"白箱"机器学习模型:它像人做判断一样,每次选一个特征、一个切分阈值,把样本分成更"纯"的子集,递归下去直到子集足够纯净或达到深度限制,最终形成一棵 if-then 规则树。最大优点是天然可解释(路径即规则)、无需特征缩放、能处理混合类型特征;缺点是容易过拟合(树过深会记住噪声),且对数据微小变动不稳定。工业上常与集成方法(随机森林、XGBoost)结合。

三、数学原理与推导

对数据集 DD,特征 aa 的信息熵:

H(D)=−∑k=1Kpklog⁡2pk H(D)=-\sum_{k=1}^{K}p_k\log_2 p_k

按特征 aa 取值分成 VV 个子集 DvD_v,信息增益:

Gain(D,a)=H(D)−∑v=1V∣Dv∣∣D∣H(Dv) \mathrm{Gain}(D,a)=H(D)-\sum_{v=1}^{V}\frac{|D_v|}{|D|}H(D_v)

ID3 选增益最大的特征分裂;C4.5 用增益率 GR=Gain/SplitInfo\mathrm{GR}=\mathrm{Gain}/\mathrm{SplitInfo} 抑制取值多的特征偏置。

CART 用 Gini 不纯度 Gini(D)=1−∑pk2Gini(D)=1-\sum p_k^2,每步二分使 GiniGini 下降最大。递归建树后常以预剪枝(限深、限叶样本数)或后剪枝控制过拟合。叶子节点的类分布即预测。

四、建模 / 求解步骤

  1. 选最优分裂特征 / 阈值
  2. 划分样本
  3. 递归建子树
  4. 剪枝防过拟合
  5. 输出规则

五、关键公式速查

信息增益=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 组样本。用于计算单特征信息增益、找最佳分裂。

十、常见误区与避坑清单

  • 易过拟合(要剪枝 / 限深)
  • 对类别不平衡敏感
  • 不稳定(数据微变树变)

十一、结果怎么解读

沿路径即规则;看特征重要性。

十二、常与谁搭配

集成用随机森林。

十三、论文写作技巧(怎么把它写进论文)

把 决策树 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

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 双版本示例与可下载练手数据集。