从原理到实践:手把手教你用Python绘制CART决策树

1次阅读
没有评论

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

image.webp

一、CART 决策树原理简介

决策树是一种经典的机器学习算法,而 CART(Classification and Regression Trees)是其中最常见的一种类型。它通过递归地将数据集划分成更小的子集来构建树结构,每个内部节点代表一个特征判断,每个分支代表判断结果,而每个叶节点代表最终的预测结果。

从原理到实践:手把手教你用 Python 绘制 CART 决策树

CART 决策树的核心是基尼系数(Gini Index)和二分法:

  • 基尼系数:衡量数据集的不纯度,值越小表示数据越纯。计算公式为:Gini = 1 – Σ(p_i)^2,其中 p_i 是第 i 类样本的比例。
  • 二分法:CART 每次只做二元分裂,即对于每个特征,选择最优的分割点将数据分成两部分。

二、决策树可视化的痛点

在实际应用中,决策树可视化常遇到以下问题:

  • 特征维度高时显示混乱:当特征数量很多时,树的结构会变得非常复杂,难以阅读。
  • 分类树与回归树的差异:分类树显示的是类别分布,而回归树显示的是均值,两者可视化方式不同。
  • 节点信息不完整:默认可视化可能缺少关键信息,如样本数量、基尼系数等。

三、技术实现:用 sklearn 训练并可视化决策树

1. 数据预处理

我们使用经典的 iris 数据集作为示例:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

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

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

2. 模型训练与参数调优

from sklearn.tree import DecisionTreeClassifier

# 创建决策树分类器
dtree = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)

# 训练模型
dtree.fit(X_train, y_train)

# 评估模型
print("训练集准确率:", dtree.score(X_train, y_train))
print("测试集准确率:", dtree.score(X_test, y_test))

重要参数说明:

  • criterion: 分裂标准,’gini’ 表示使用基尼系数
  • max_depth: 树的最大深度,控制模型复杂度
  • random_state: 随机种子,保证结果可复现

3. 可视化输出

首先安装 Graphviz 工具,然后使用以下代码生成可视化:

from sklearn.tree import export_graphviz
import graphviz

# 导出 dot 文件
dot_data = export_graphviz(dtree, 
                          out_file=None, 
                          feature_names=iris.feature_names,  
                          class_names=iris.target_names,  
                          filled=True, 
                          rounded=True,  
                          special_characters=True)

# 渲染并显示
graph = graphviz.Source(dot_data)
graph.render("iris_tree")  # 保存为 PDF
graph  # 在 Jupyter 中显示

生成的决策树结构示例:

根节点
├── [特征 A ≤ 0.5] -> 左子树
│   ├── [特征 B ≤ 1.2] -> 叶节点 1
│   └── [特征 B > 1.2] -> 叶节点 2
└── [特征 A > 0.5] -> 右子树
    ├── [特征 C ≤ 2.1] -> 叶节点 3
    └── [特征 C > 2.1] -> 叶节点 4 

四、避坑指南

  1. Graphviz 环境变量配置错误
  2. 问题:执行时报错 ”Graphviz executables not found”
  3. 解决:下载安装 Graphviz,并将其 bin 目录添加到系统 PATH

  4. 特征名称未传入

  5. 问题:可视化时特征显示为 X[0], X[1]等不直观的名称
  6. 解决:确保传入 feature_names 参数

  7. 中文显示乱码

  8. 问题:节点中的中文显示为乱码
  9. 解决:在 export_graphviz 中添加 fontname="SimHei" 参数

五、进阶可视化建议

对于更高级的可视化需求,可以使用 dtreeviz 库:

from dtreeviz.trees import dtreeviz

viz = dtreeviz(dtree, 
               X_train, 
               y_train,
               target_name="class",
               feature_names=iris.feature_names,
               class_names=iris.target_names)

viz.view()

dtreeviz 提供了更丰富的可视化效果,包括:
– 每个节点的样本分布直方图
– 特征重要性可视化
– 交互式探索功能

六、延伸阅读

通过本文的学习,你应该已经掌握了 CART 决策树的原理和 Python 实现方法。决策树可视化是理解模型行为的重要手段,希望这些技巧能帮助你更好地分析和优化模型。

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