AI决策树从入门到实战:原理详解与Python代码实现

1次阅读
没有评论

共计 1937 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

为什么决策树是机器学习初学者的第一课

决策树作为最直观的机器学习算法之一,在银行信贷评估、医疗诊断、推荐系统等领域广泛应用。它的最大特点是像人类做决定一样层层判断——比如银行审批贷款时,先看收入,再看负债,最后查信用记录,这种分步决策过程天然适合用决策树建模。

AI 决策树从入门到实战:原理详解与 Python 代码实现

我刚开始学机器学习时,就被它两个特点吸引:

  • 可视化:训练完成后能直接看到树形结构,比黑箱模型好理解多了
  • 无需特征缩放:不像 SVM、神经网络需要标准化数据,直接用原始值就能跑

决策树是怎样 ” 思考 ” 的

1. 理解信息熵——决策树的数学基础

决策树分裂节点的核心思想是:让子节点比父节点更 ” 纯 ”。这里 ” 纯度 ” 用信息熵衡量,公式很简单:

import numpy as np
def entropy(p):
    return -p * np.log2(p) - (1-p) * np.log2(1-p)

举个实际例子:

  • 父节点有 10 个样本,5 正 5 负,熵 =1(最混乱)
  • 按某个特征分裂后:
  • 左节点 8 个样本,7 正 1 负,熵≈0.54
  • 右节点 2 个样本,2 负 0 正,熵 =0
  • 信息增益 = 父熵 – 子熵加权和 = 1 – (0.80.54 + 0.20) ≈ 0.57

2. 三大分裂准则对比

实际应用中我们会遇到不同选择:

算法 适用问题 特点 缺点
ID3 分类 只用信息增益 不能处理连续特征
C4.5 分类 用信息增益比,可处理连续值 计算量较大
CART 分类 / 回归 用基尼系数,支持二叉树 容易过拟合

实际建议:大多数情况直接用 CART,sklearn 的 DecisionTreeClassifier 默认就是它。

手把手 Python 实战

1. 基础分类流程

用 sklearn 自带的鸢尾花数据集演示:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt

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

# 训练模型(限制树深防过拟合)clf = DecisionTreeClassifier(max_depth=3)
clf.fit(X, y)

# 可视化
plt.figure(figsize=(12,8))
plot_tree(clf, feature_names=iris.feature_names, 
          class_names=iris.target_names, filled=True)
plt.show()

运行后会看到一棵包含花瓣长度、宽度等判断条件的分层决策树,不同颜色代表不同类别。

2. 关键特征分析

决策树还有个实用功能——评估特征重要性:

import pandas as pd

# 获取特征重要性
importance = pd.DataFrame({
    'feature': iris.feature_names,
    'importance': clf.feature_importances_
}).sort_values('importance', ascending=False)

print(importance)

输出示例:

          feature  importance
2  petal length (cm)    0.666667
3   petal width (cm)    0.333333
0  sepal length (cm)    0.000000
1   sepal width (cm)    0.000000

说明在这个分类问题中,花瓣尺寸比花萼尺寸重要得多。

避坑指南:决策树常见问题

1. 解决过拟合的两种剪枝方法

  • 预剪枝:训练前设置约束

    clf = DecisionTreeClassifier(
        max_depth=5,         # 最大深度
        min_samples_split=10, # 节点最少样本数
        min_impurity_decrease=0.01 # 分裂最小增益
    )

  • 后剪枝:训练后修剪(sklearn 不支持,可用 cost_complexity_pruning_path)

2. 处理类别不平衡

  • 设置 class_weight 参数自动平衡
    clf = DecisionTreeClassifier(class_weight='balanced')
  • 上采样少数类或下采样多数类

3. 性能优化技巧

  • 大数据集用 max_features 参数限制每层考虑的特征数
  • 实时系统可提前将决策树转换为 if-else 规则
  • 考虑用 LightGBM 等优化实现替代

下一步学习方向

当你掌握了单棵决策树后,可以思考:

  1. 随机森林是如何通过多棵树降低过拟合的?
  2. GBDT 为什么能比单棵决策树有更好的预测效果?
  3. 决策树的特征重要性评估方法能否用于其他模型?

决策树就像机器学习的乐高积木,它既能单独使用,更是构建随机森林、GBDT 等强大模型的基础组件。建议大家在实践中多调整参数观察效果,你会对机器学习有更直观的感受。

正文完
 0
评论(没有评论)