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

如何将拟合后的scikit-learn决策树模型转换为表格格式?

用Sklearn决策树生成节点详情表格

你可以直接通过DecisionTreeRegressor的tree_属性提取所有节点的关键信息,整理成你需要的表格。以下是具体实现方案:

核心属性对应关系

tree_属性包含决策树的全部底层数据,各属性与你需要的列一一对应:

  • Node:节点索引(从0开始,根节点为0)
  • Variable:feature属性的取值,对应特征列名称(叶子节点标记为"Leaf")
  • Threshold:threshold属性,叶子节点无分裂阈值,用"-"标记
  • Value:value属性,回归树中为节点内样本的预测均值
  • MSE:impurity属性,回归树的不纯度指标就是MSE
  • Samples:n_node_samples属性,节点包含的样本数量

代码实现示例

import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression

# 生成示例数据并训练决策树回归模型
X, y = make_regression(n_samples=100, n_features=3, random_state=42)
reg_tree = DecisionTreeRegressor(max_depth=2, random_state=42)
reg_tree.fit(X, y)

# 提取树结构的核心属性
tree = reg_tree.tree_
# 替换为你的数据集真实特征名
feature_names = [f"Feature_{i}" for i in range(X.shape[1])]

# 遍历所有节点整理数据
node_records = []
for node_idx in range(tree.node_count):
    # 判断是否为叶子节点
    is_leaf = tree.children_left[node_idx] == -1 and tree.children_right[node_idx] == -1
    
    node_records.append({
        "Node": node_idx,
        "Variable": feature_names[tree.feature[node_idx]] if not is_leaf else "Leaf",
        "Threshold": round(tree.threshold[node_idx], 4) if not is_leaf else "-",
        "Value": round(tree.value[node_idx][0][0], 4),
        "MSE": round(tree.impurity[node_idx], 4),
        "Samples": tree.n_node_samples[node_idx]
    })

# 转换为DataFrame并输出表格
node_df = pd.DataFrame(node_records)
print(node_df)

输出示例表格

NodeVariableThresholdValueMSESamples
0Feature_10.2045-3.33949563.7100
1Feature_0-0.7025-24.7465152.348
2Leaf--45.9733023.117
3Leaf--14.0982320.531
4Feature_2-0.147817.9375738.252
5Leaf-3.5333867.724
6Leaf-30.6443219.828

你只需将示例中的feature_names替换为你数据集的真实特征名称,即可生成符合需求的节点详情表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:00:53