news 2026/11/3 2:30:19

supertree API完整参考:SuperTree、Node与TreeData三大核心类详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
supertree API完整参考:SuperTree、Node与TreeData三大核心类详解

【免费下载链接】supertree

Impress your boss with interactive Decision Tree visualization

项目地址:https://gitcode.com/gh_mirrors/su/supertree
点击查看免费下载

supertree 是一个在 Jupyter 中实现交互式决策树可视化的 Python 库,支持 scikit-learn、LightGBM、XGBoost 和 ONNX 模型,让决策树可视化支持缩放、折叠、动态深度调节与单样本路径追踪。本文完整解析 supertree 的 API:SuperTree、Node、TreeData 三大核心类的参数、方法与数据流转机制,帮助你快速掌握决策树可视化 API。

🧭 三大核心类一图看懂

supertree 的核心代码集中在supertree/目录,三个类的分工非常清晰:

核心类源码位置职责
SuperTreesupertree/supertree.py决策树可视化入口:校验模型、解析节点、渲染 HTML、导出 JSON
Nodesupertree/node.py单个决策树节点的数据结构:分裂特征、阈值、样本数等
TreeDatasupertree/treedata.py样本数据与可视化配置容器:特征名、目标名、原始数据、调色板

数据流转路径:SuperTree.__init__接收训练好的模型 →convert_model_to_dict_array()把模型解析为节点字典列表 → 每个字典构建一个Node对象 → 用 DFS 算法 _create_node_dfs() 组织成树 → 最终与TreeData合并为 JSON,交给前端 D3.js 渲染成可交互的决策树。

🌳 SuperTree:决策树可视化主类

构造参数详解

SuperTree构造函数在 supertree/supertree.py 中定义,负责全部参数校验:

参数必填默认值说明
model✅—已训练的模型,支持 20+ 种树模型(见下文支持列表)
feature_data⬜None特征数据,支持 list / np.ndarray / DataFrame / Series,须与target_data同时提供
target_data⬜None目标数据,类型同上
feature_names⬜None特征名列表,不传时自动从 DataFrame 列名或feature0/1/2…推断
target_names⬜None分类任务传类别名列表,回归任务传单个字符串
color_palette⬜1可视化配色方案编号,从 1 开始
show_palette_control⬜False是否在界面中显示配色切换控件

💡 注意:构造时会自动调用 is_model_fitted() 检查模型是否已fit(),未训练会直接抛出Model is not fitted异常;which_model()会自动识别这是分类还是回归模型。

常用方法速查

方法作用关键参数
show_tree()在 notebook 中显示交互式决策树见下表
save_html()保存为独立 HTML 文件(默认output.html)同 show_tree,外加filename
save_json_tree()导出决策树 JSON 数据同上
get_max_tree_size()获取森林/梯度模型中的树数量—
which_model()识别模型类型(classification / regression)—

show_tree()的参数是日常使用中最常打交道的部分:

参数默认值说明
which_tree0森林类模型中选第几棵树(Random Forest 的第 3 棵树即show_tree(2))
which_iteration0HistGradientBoosting 的迭代轮次
start_depth5初始渲染深度,大树可设小一点加速渲染
max_samples7500最多渲染的样本点数,大数据集提速关键
show_sampleNone传入一个样本的[特征值]列表,界面出现按钮可高亮该样本的决策路径
widgetsFalse是否用 ipywidgets 输出(带森林切换的上一棵/下一棵按钮)

支持的模型清单

SuperTree内部通过 valid_model_classes 白名单校验模型,目前支持:

  • scikit-learn:DecisionTree*、ExtraTree*、ExtraTrees*、RandomForest*、GradientBoosting*、HistGradientBoosting*
  • LightGBM:LGBMClassifier、LGBMRegressor、Booster
  • XGBoost:XGBClassifier、XGBRegressor、XGBRF*、Booster
  • ONNX:ModelProto树模型
  • 自定义:通过 ModelLoader 手动传入节点字典列表,可视化任意框架的树

🪴 Node:决策树节点数据结构

Node类(supertree/node.py)描述树中的每一个节点,由SuperTree在解析模型时自动创建,一般不需要手动实例化。

属性类型含义
featureint分裂使用的特征索引(叶子节点为 -1)
thresholdfloat分裂阈值
impurityfloat不纯度指标(Gini / 熵 / split gain)
samplesint到达该节点的样本数
class_distributionlist各类别样本分布(回归为预测值)
treeclassstr该节点预测的类别
is_leafbool是否叶子节点
left_children/right_childrenint左右子节点在扁平数组中的索引
left_node/right_nodeNode左右子节点的对象引用(DFS 构建时挂载)
start_end_x_axislist每个特征的样本取值区间,用于无样本数据时回溯统计

两个关键方法:

  • to_dict():把节点递归转换为可 JSON 序列化的字典,并自动处理 numpy 标量、ndarray、pandas Series 类型转换;
  • add_left() / add_right():在 DFS 遍历 _create_node_dfs() 过程中,把子节点挂到父节点,同时累积每个特征上的样本区间(如petal_width < 0.8且> 0.6),这就是悬停节点时能展示直方图/散点图的数据基础。

🗂️ TreeData:样本数据与可视化配置容器

TreeData类(supertree/treedata.py)由SuperTree.__init__自动构建,保存"数据侧"的所有信息,与Node的"结构侧"互补。

核心属性:

属性说明
feature_names/target_names特征名与目标名(自动展平 DataFrame/ndarray)
data_feature/data_target原始样本数据(to_dict()时会按max_samples截断)
tree_typeclassification/regression(无数据时为nodata*)
split_rule节点比较语义:lt_gte(< 和 ≥,sklearn 系)或lte_gt(≤ 和 >,LightGBM/ONNX)
which_tree/tree_count当前树索引与森林总树数,驱动界面顶部的 "Tree 3 / 100" 切换器
palette/show_palette_control配色方案与切换控件开关
show_sample待高亮样本路径的特征值列表

常用方法:to_dict() 生成tree_data部分 JSON;set_show_sample() 校验样本长度后设置高亮样本;convert_target_strings() 把字符串标签自动映射为类别索引。

📦 最终输出:两部分 JSON 结构

渲染时 _get_combined_data() 会把两部分合并成一个 JSON 传给前端:

{ "node_data": {...}, # Node.to_dict() 递归生成的树结构 "tree_data": {...} # TreeData.to_dict() 生成的数据与配置 }

save_html()与save_json_tree()的区别就在于:前者把该 JSON 嵌入 templatehtml.py 的 D3.js 模板,后者仅导出纯 JSON 供二次开发使用。

⚠️ 常见报错速查

报错信息原因与解决
Model is not fitted模型未训练,先调用model.fit(...)
Invalid model type. Expected one of [...]传入的模型不在支持列表内,可用ModelLoader走自定义路径
Target Data and Feature data should both exist or notfeature_data与target_data必须成对提供或都不提供
Invalid target_names length分类任务的类别名数量与target_data实际类别数不一致
渲染很慢调小max_samples(默认 7500)或start_depth

📚 相关源码与文档

  • 主类实现:supertree/supertree.py
  • 节点结构:supertree/node.py
  • 数据容器:supertree/treedata.py
  • 自定义模型加载器:supertree/model_loader.py
  • 完整 API 文档:docs/python_docs.md
  • 官方示例 Notebook:examples/MainExample.ipynb、examples/GradientBoostExample.ipynb

掌握 SuperTree 的参数校验、Node 的树形组织与 TreeData 的数据封装这三块,你就理解了 supertree 决策树可视化的全部 API 骨架——剩下的缩放、路径高亮、SVG 导出等交互能力,都由前端自动接管。

【免费下载链接】supertree

Impress your boss with interactive Decision Tree visualization

项目地址:https://gitcode.com/gh_mirrors/su/supertree
点击查看免费下载
上一篇:immortal-skill 安装与集成指南:3步把数字分身接入 OpenClaw(快速上手教程)
下一篇:WelcomeCoordinator 完整入门:addPage 添加页面与 4 大自定义属性详解

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!