You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用GraphViz实现带10折交叉验证的决策树可视化求助

决策树GraphViz可视化实现指引

前置依赖安装

  • 安装GraphViz本体工具
    • Windows:下载官方安装包后,将安装目录下的bin文件夹路径添加到系统环境变量PATH
    • macOS:终端执行 brew install graphviz
    • Linux:终端执行 sudo apt install graphviz
  • 安装Python依赖:终端执行 pip install graphviz pydotplus

代码实现说明

你现有代码已经完成了交叉验证评估和全量数据模型训练,只需在训练完成的代码段后添加可视化逻辑即可,完整修改后代码如下:

import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import cross_validate
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import graphviz

data = pd.read_csv("goddess_2.csv")
label_Label = LabelEncoder()
data["Label"] = label_Label.fit_transform(data['Label'])

X = data.drop("Label", axis = 1)
y = data['Label']

# 10折交叉验证评估
model = DecisionTreeClassifier()
scoring = ['accuracy','precision_weighted', 'recall_weighted','f1_weighted']
scores = cross_validate(model,  X, y, cv=10, scoring=scoring)

Accuracy = scores['test_accuracy'].mean()
Precision = scores['test_precision_weighted'].mean()
Recall = scores['test_recall_weighted'].mean()
F1Score= scores['test_f1_weighted'].mean()

print("********** Decision Tree *********")
print("\nAccuracy,", round(Accuracy * 100,3))
print("\nPrecision,", round(Precision * 100,4))
print("\nRecall,", round(Recall * 100,4))
print("\nF1-Score,", round(F1Score * 100,4))
print("\n")

# 全量数据训练决策树
clf = DecisionTreeClassifier(random_state=1234)
model = clf.fit(X, y)
text_representation = tree.export_text(clf)
print(text_representation)

# -------------------新增GraphViz可视化逻辑-------------------
dot_data = tree.export_graphviz(
    clf,
    out_file=None,
    feature_names=X.columns.tolist(), # 显示实际特征名
    class_names=label_Label.inverse_transform(clf.classes_), # 显示原始分类标签
    filled=True, # 节点按分类填充对应颜色
    rounded=True, # 节点使用圆角样式
    special_characters=True # 支持特殊字符正常显示
)

# 渲染并保存可视化结果
graph = graphviz.Source(dot_data)
# 保存为PDF格式,同时生成dot源文件
graph.render("决策树可视化结果")
# 如需保存为PNG格式,使用下行代码即可
# graph.render("决策树可视化结果", format="png")

注意事项

如果你的数据集特征较多、决策树深度过大,生成的可视化图会过于宽泛难以查看,可以在初始化DecisionTreeClassifier时添加max_depth参数限制树的最大深度,例如clf = DecisionTreeClassifier(random_state=1234, max_depth=5)。

内容的提问来源于stack exchange,提问作者Yawar Abbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:15:01