决策树(Decision Tree)完整解析:原理 + 数学推导 + 剪枝 + 实战

1️⃣ 什么是决策树?

决策树(Decision Tree)是一种常见的监督学习方法,可用于分类 和回归 。

其基本思想是:

通过特征条件的逐层划分,将数据集分割成越来越"纯净"的子集,直到子集中的样本几乎属于同一类别。

最终输出是一个树形结构,每个叶节点对应一个类别或预测值。

2️⃣ 决策树的构建思想

  1. 从根节点开始,选择一个最佳特征来划分数据集

  2. 对划分后的子集递归构建子树

  3. 当满足停止条件时(子集纯净、特征用尽或达到深度限制)终止

3️⃣ 特征选择指标

决策树核心在于:如何选择最优的划分特征?

(1) 信息增益(ID3算法)

熵(Entropy)定义:

其中 ​ 是类别 在数据集 中的概率。

信息增益定义:

  • :特征

  • :在特征下的数据子集

优点:选择信息增益最大的特征,降低数据的不确定性。

(2) 信息增益率(C4.5算法)

信息增益率定义:

其中

(3) 基尼指数(CART算法)

基尼指数定义:

某特征 的基尼指数:

4️⃣ 决策树生成与剪枝

4.1 生成过程

  • 递归划分数据集

  • 根据指标(信息增益/基尼指数)选择最优特征

  • 当样本数量小于阈值或特征用尽,生成叶节点

4.2 剪枝(Pruning)

防止过拟合,主要有两类:

  • 预剪枝(Pre-Pruning) :

    在生成树时提前终止划分,例如:

    • 最大深度限制

    • 节点最小样本数限制

    • 信息增益小于阈值

  • 后剪枝(Post-Pruning) :

    完整生成树后,再自底向上删除不必要的分支。

5️⃣ 决策树的完整数学表达

分类决策函数为:

回归任务可输出均值:

6️⃣ Python实现(Sklearn)

python 复制代码
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_text

# 加载数据
X, y = load_iris(return_X_y=True)

# 构建决策树
clf = DecisionTreeClassifier(criterion="gini", max_depth=3, random_state=0)
clf.fit(X, y)

# 输出结构
print(export_text(clf, feature_names=["sepal_length","sepal_width","petal_length","petal_width"]))

如果需要可视化:

python 复制代码
from sklearn import tree
import matplotlib.pyplot as plt

plt.figure(figsize=(12,8))
tree.plot_tree(clf, filled=True, feature_names=["sepal_length","sepal_width","petal_length","petal_width"])
plt.show()

7️⃣ 优缺点总结

✅ 优点

  • 可解释性强,输出清晰的规则

  • 不需要大量特征工程(无需归一化)

  • 能同时处理数值型和离散型特征

❌ 缺点

  • 容易过拟合,需要剪枝

  • 对数据微小波动敏感

  • 贪心选择特征,可能不是全局最优

8️⃣ 应用场景

  • 风控评分卡(可解释性需求高)

  • 医学诊断、临床辅助

  • 客户细分、市场营销

  • 与集成学习(RandomForest、XGBoost)结合

📚 总结

  • ID3 用信息增益 ,C4.5 用信息增益率 ,CART 用基尼指数

  • 剪枝是防止过拟合的关键步骤

  • 决策树是集成学习方法的核心基学习器

相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark3 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark3 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法