如何将拟合后的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)
输出示例表格
| Node | Variable | Threshold | Value | MSE | Samples |
|---|---|---|---|---|---|
| 0 | Feature_1 | 0.2045 | -3.3394 | 9563.7 | 100 |
| 1 | Feature_0 | -0.7025 | -24.746 | 5152.3 | 48 |
| 2 | Leaf | - | -45.973 | 3023.1 | 17 |
| 3 | Leaf | - | -14.098 | 2320.5 | 31 |
| 4 | Feature_2 | -0.1478 | 17.937 | 5738.2 | 52 |
| 5 | Leaf | - | 3.533 | 3867.7 | 24 |
| 6 | Leaf | - | 30.644 | 3219.8 | 28 |
你只需将示例中的feature_names替换为你数据集的真实特征名称,即可生成符合需求的节点详情表格。
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

