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

如何将Random Forest所有decision tree保存到同一个PDF文件

问题原因

仅保存到最后一棵决策树的核心原因是导出逻辑存在覆盖问题:要么每次绘图时重置了画布内容,要么每次写文件时直接覆盖了之前已写入的PDF内容,没有做追加写入。

实现代码

如果未安装依赖库,先执行安装命令:
pip install scikit-learn matplotlib

完整可运行代码:

import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.tree import plot_tree
from matplotlib.backends.backend_pdf import PdfPages

# --------------- 以下为示例模型训练,替换成你自己训练好的模型即可 ---------------
X, y = load_iris(return_X_y=True)
# n_estimators对应随机森林的决策树数量,按你的实际需求设置
rf_model = RandomForestClassifier(n_estimators=10, random_state=42)
rf_model.fit(X, y)
# -----------------------------------------------------------------------------

# 初始化多页PDF写入器,所有树会按顺序写入同一个文件
with PdfPages("all_rf_decision_trees.pdf") as pdf_writer:
    # 遍历随机森林中的每一棵决策树
    for tree_id, single_tree in enumerate(rf_model.estimators_):
        # 每棵树单独创建画布,避免绘图重叠
        fig, ax = plt.subplots(figsize=(14, 9))
        # 绘制单棵决策树
        plot_tree(
            single_tree,
            filled=True,
            ax=ax,
            feature_names=load_iris().feature_names,  # 替换为你自己数据集的特征名列表
            class_names=load_iris().target_names,     # 替换为你自己数据集的类别名列表
            rounded=True,
            proportion=False
        )
        ax.set_title(f"Decision Tree {tree_id + 1}/{len(rf_model.estimators_)}", fontsize=15)
        # 当前树的绘图存入PDF新一页
        pdf_writer.savefig(fig, bbox_inches="tight")
        # 关闭画布释放内存
        plt.close(fig)

print(f"导出完成,共保存{len(rf_model.estimators_)}棵决策树到all_rf_decision_trees.pdf")
避坑说明
  • 不要在遍历树的循环内部初始化PdfPages对象,否则每次循环都会覆盖原有PDF文件,最终只会留下最后一棵树
  • 如果单棵树节点过多文字重叠,直接调大subplots里的figsize参数即可,比如改成(20,12)
  • 如果你用的是自己的数据集,记得把feature_names、class_names替换成对应的值,否则节点只会显示特征下标,可读性差
  • 代码运行完成后,PDF文件会生成在当前Python脚本的运行目录下,每一页对应一棵决策树

内容的提问来源于stack exchange,提问作者Francisco Felipe Vilches M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:09:25