决策树的核心思想

一、决策树的核心思想

  • 本质:通过特征判断对数据集递归划分,形成树形结构。
  • 目标:生成一组"若-则"规则,使数据划分到叶子节点时尽可能纯净。
  • 关键流程
    1. 特征选择:选择最佳分裂特征(如信息增益最大)。
    2. 节点分裂:根据特征取值划分子节点。
    3. 停止条件:节点样本纯度过高或样本数过少时终止。

二、数学公式与理论

1. 信息熵(Information Entropy)

衡量数据集的混乱程度:

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

  • K K K:类别总数
  • p k p_k pk:第 k k k 类样本的占比
  • 熵值范围 : 0 0 0(完全纯净)到 log ⁡ 2 K \log_2 K log2K(完全混乱)
2. 信息增益(Information Gain)

特征 A A A 分裂后熵的减少量:

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

  • D v D^v Dv:特征 A A A 取值为 v v v 的子集
  • 分裂标准:选择信息增益最大的特征
3. 基尼不纯度(Gini Impurity)

另一种纯度衡量指标:

Gini ( D ) = 1 − ∑ k = 1 K p k 2 \text{Gini}(D) = 1 - \sum_{k=1}^{K} p_k^2 Gini(D)=1−k=1∑Kpk2

  • 特点:计算效率比熵高,常用于分类树
4. 回归树的均方误差(MSE)

节点内样本的预测误差:

MSE = 1 N ∑ i = 1 N ( y i − y ˉ ) 2 \text{MSE} = \frac{1}{N} \sum_{i=1}^{N} (y_i - \bar{y})^2 MSE=N1i=1∑N(yi−yˉ)2

  • y ˉ \bar{y} yˉ:节点样本的均值
  • 分裂目标:最小化分裂后的加权 MSE

三、代码实现(Python)

示例:手动计算基尼系数
python 复制代码
import numpy as np

def compute_gini(y):
    # y: 样本标签数组
    classes, counts = np.unique(y, return_counts=True)
    proportions = counts / len(y)
    gini = 1 - np.sum(proportions ** 2)  # 对应公式 $Gini(D) = 1 - \sum p_k^2$
    return gini

# 示例:计算基尼系数
y = np.array([0, 0, 0, 1, 1, 1, 1])  # 3个0类,4个1类
print("基尼系数:", compute_gini(y))  # 输出:1 - ( (3/7)^2 + (4/7)^2 ) ≈ 0.49
使用 Scikit-learn 实现分类树
python 复制代码
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

# 加载数据
data = load_iris()
X, y = data.data, data.target

# 创建模型(使用基尼系数,限制树深度)
model = DecisionTreeClassifier(
    criterion="gini",       # 分裂标准:基尼系数 $Gini(D)$
    max_depth=3,            # 最大深度防止过拟合
    min_samples_split=10    # 节点最少10样本才分裂
)
model.fit(X, y)

# 查看特征重要性(对应信息增益贡献)
print("特征重要性:", model.feature_importances_)

四、实际应用场景

1. 分类任务
  • 信用卡欺诈检测
    • 特征:交易金额、地点、时间间隔
    • 标签:正常/欺诈
    • 方法:计算特征的信息增益,选择关键特征(如"金额 > 阈值")
2. 回归任务
  • 房价预测
    • 特征:面积、房间数、地理位置
    • 标签:房价
    • 方法:递归划分区域,使每个区域的房价 MSE 最小
3. 其他领域
  • 医疗诊断:根据症状(特征)判断疾病类型(标签)
  • 工业控制:根据传感器数据(特征)判断设备故障(标签)

五、决策树的优缺点

优点 缺点
可解释性强(规则可视化) 容易过拟合(需剪枝)
支持类别和数值特征 对数据微小变化敏感
无需特征标准化 回归任务中预测不够平滑
相关推荐
别动我齐刘海3 分钟前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
zhangfeng11339 分钟前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
0+11112 分钟前
算法 --滑动窗口
c++·算法·leetcode
三十岁老牛再出发33 分钟前
9月18日总结
python·深度学习·机器学习
_橙时_42 分钟前
【EM算法例子】
机器学习·em算法
reikocao1 小时前
大场景下 Hessian 特征值放大与退化检测
算法
hetao17338371 小时前
2026-09-18 hetao1733837 的刷题记录
c++·算法
wuyk5551 小时前
21.计数排序:不用比较的“空间换时间”排序算法
python·算法·排序算法
船厂电气自动化ai大模型1 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习
Rabitebla2 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法