首页
学习
活动
专区
圈层
工具
发布

决策树:像人类一样思考的 AI 模型(小白也能看懂)

决策树是机器学习中最贴近人类决策逻辑的算法之一,本文系统介绍其原理、构建过程、核心拆分指标(熵/信息增益/基尼系数),以及优缺点与优化方法,并附可运行的 Python 代码示例。

一、什么是决策树?

决策树是一种模拟人类决策过程的监督学习算法,可用于**分类**与**回归**任务。其结构呈倒置的树形:

1. **根节点**:初始判断条件(如“是否阴天?”)

2. **决策节点**:中间分支,基于特征继续拆分

3. **叶节点**:最终预测结果

模型从数据中自动学习提问的顺序与阈值,逐步缩小选择范围并得出结论。

**核心优势:可解释性强**

相比“黑箱”模型,决策树的每一步推理均可追溯。这一特性使其在金融风控、医疗辅助诊断、客户分群等场景中得到广泛应用。

二、决策树构建示例:树木分类

下图是常见的二维数据分布示例,决策树会在这样的空间中进行划分。

以树干直径和高度两个特征区分苹果树、樱桃树和橡树为例。

1. **首次拆分(根节点)**

直径 ≥ 0.45 的样本几乎全为橡树 建立橡树叶节点。

2. **二次拆分**

剩余样本中,高度 ≤ 4.88 的为樱桃树 建立樱桃树叶节点。

3. **进一步细分**

对仍混杂的区域,继续按直径、高度拆分,直至数据纯度满足要求。

4. **停止拆分**

无限拆分会导致**过拟合**(模型记忆噪声而非学习规律)。需要通过限制树深度、叶节点最小样本数等方式控制模型复杂度。

三、决策树如何选择最优拆分点?

决策树使用**信息增益**等指标评估拆分质量,核心概念为**熵**。

1. 熵(Entropy):衡量数据纯度

熵为 0:样本全部属于同一类别(最纯)

熵最大:各类别均匀混合(最不确定)

2. 信息增益(Information Gain)

信息增益 = 拆分前的熵 − 拆分后子节点的加权平均熵

决策树选择**信息增益最大**的特征与阈值作为拆分点。

> 在树木分类示例中,直径 = 0.45 时信息增益达到最大值,因此成为根节点。

3. 基尼系数(Gini Impurity)

与熵功能相似,但无需对数计算,训练速度更快。实际应用中可任选其一。

四、优势与局限

优势

1. **可解释性强**:非技术人员也能理解推理路径

2. **预处理简单**:无需特征标准化或归一化

3. **对异常值相对不敏感**(相比距离依赖型模型)

4. **预测速度快**,训练效率较高

局限

5. **不稳定性**:数据微小变化可能导致树结构显著改变

6. **易过拟合**:无约束时倾向于过度细化

常用优化方法

7. **剪枝**:限制最大深度、叶节点最小样本数、最小不纯度减少量等

8. **集成模型**:随机森林、梯度提升树(GBDT)等通过多棵树组合降低不稳定性

下图是一个典型的决策树超参数调节面板

五、总结

决策树以嵌套的“如果-那么”规则实现高效分类与回归,是解释性最强的模型之一。尽管单棵决策树存在不稳定、易过拟合的缺点,但通过剪枝与集成学习可以显著提升其泛化能力。同时,决策树也是随机森林、XGBoost 等更复杂集成模型的基础,值得深入掌握。

附录:Python 代码示例(基于 scikit-learn)

以下示例使用鸢尾花数据集训练一棵最大深度为 3 的决策树,并输出准确率与可视化图形。

```python

from sklearn.tree import DecisionTreeClassifier

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.tree import plot_tree

import matplotlib.pyplot as plt

# 加载数据

iris = load_iris()

X, y = iris.data, iris.target

# 划分训练集、测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

# 训练决策树(限制最大深度3)

clf = DecisionTreeClassifier(max_depth=3)

clf.fit(X_train, y_train)

# 预测准确率

print("准确率:", clf.score(X_test, y_test))

类似下图的输出,可以直观看到模型是否过拟合:

# 可视化决策树

plt.figure(figsize=(12,8))

plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)

plt.show()

下图展示了训练后决策树在二维平面上的决策边界,不同颜色代表不同类别。

未经许可,请勿用于商业用途。

了解更多https://www.imodel.com.ai/interactive-decision-tree-experiment.html

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oe-CZEWD_M6bfAs3B9sUmoAg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券