【免费下载链接】supertree
Impress your boss with interactive Decision Tree visualization
supertree 是一个在 Jupyter 中实现交互式决策树可视化的 Python 库,支持 scikit-learn、LightGBM、XGBoost 和 ONNX 模型,让决策树可视化支持缩放、折叠、动态深度调节与单样本路径追踪。本文完整解析 supertree 的 API:SuperTree、Node、TreeData 三大核心类的参数、方法与数据流转机制,帮助你快速掌握决策树可视化 API。
🧭 三大核心类一图看懂
supertree 的核心代码集中在supertree/目录,三个类的分工非常清晰:
| 核心类 | 源码位置 | 职责 |
|---|---|---|
SuperTree | supertree/supertree.py | 决策树可视化入口:校验模型、解析节点、渲染 HTML、导出 JSON |
Node | supertree/node.py | 单个决策树节点的数据结构:分裂特征、阈值、样本数等 |
TreeData | supertree/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_tree | 0 | 森林类模型中选第几棵树(Random Forest 的第 3 棵树即show_tree(2)) |
which_iteration | 0 | HistGradientBoosting 的迭代轮次 |
start_depth | 5 | 初始渲染深度,大树可设小一点加速渲染 |
max_samples | 7500 | 最多渲染的样本点数,大数据集提速关键 |
show_sample | None | 传入一个样本的[特征值]列表,界面出现按钮可高亮该样本的决策路径 |
widgets | False | 是否用 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在解析模型时自动创建,一般不需要手动实例化。
| 属性 | 类型 | 含义 |
|---|---|---|
feature | int | 分裂使用的特征索引(叶子节点为 -1) |
threshold | float | 分裂阈值 |
impurity | float | 不纯度指标(Gini / 熵 / split gain) |
samples | int | 到达该节点的样本数 |
class_distribution | list | 各类别样本分布(回归为预测值) |
treeclass | str | 该节点预测的类别 |
is_leaf | bool | 是否叶子节点 |
left_children/right_children | int | 左右子节点在扁平数组中的索引 |
left_node/right_node | Node | 左右子节点的对象引用(DFS 构建时挂载) |
start_end_x_axis | list | 每个特征的样本取值区间,用于无样本数据时回溯统计 |
两个关键方法:
- 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_type | classification/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 not | feature_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
相关推荐
FLUX 3 Image Klein提示词技巧清单:全场景描述、风格写法与7个实用图像编辑技巧
FLUX 3 Image Klein提示词技巧清单:全场景描述、风格写法与7个实用图像编辑技巧 FLUX 3 Image Klein 是 Black Fores
人工智能大模型基础模型媒体生成多模态ErrorProne API参考:核心类与方法详解
ErrorProne API参考:核心类与方法详解 ErrorProne是一个Java静态代码分析工具,能够在编译时捕获常见的Java错误。本文将详细介绍Err
静态分析代码质量开发工具wx4py API参考详解:WeChatClient、chat_window、group_manager三大核心对象
wx4py API参考详解:WeChatClient、chat_window、group_manager三大核心对象 这是一份 wx4py 微信4.x自动化库的
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考