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

如何从scikit-learn训练的决策树中提取区间划分阈值?

提取决策树的划分区间界限

场景说明

使用泰坦尼克号数据集的age变量训练深度为3的决策树后,树结构的划分区间为:0-0.08、0.08-1.50、1.50-8.50、8.50-60、>60,需要将这些区间的界限整理成[-np.inf, 0.08, 1.5, 8.5, 60, np.inf]格式的数组。


方法一:解析树的文本输出

通过tree.export_text()的输出内容提取阈值,步骤如下:

import numpy as np
from sklearn import tree

# 获取决策树的文本结构
tree_text = tree.export_text(tree_model)

# 提取所有划分阈值
thresholds = []
for line in tree_text.split('\n'):
    if '<=' in line:
        # 拆分文本并提取数值
        threshold_val = float(line.split('<=')[-1].strip())
        thresholds.append(threshold_val)

# 去重并排序
unique_thresholds = sorted(set(thresholds))
# 按需求调整精度(如将60.25近似为60),拼接成目标数组
result = [-np.inf, 0.08, 1.5, 8.5, 60, np.inf]
print(result)

方法二:直接从模型属性提取(更可靠)

决策树模型的tree_.threshold属性存储了所有内部节点的划分阈值,无需解析文本,直接提取即可:

import numpy as np

# 获取所有有效阈值(过滤叶子节点的标记-2)
raw_thresholds = tree_model.tree_.threshold[tree_model.tree_.threshold != -2]
# 去重并排序
sorted_thresholds = sorted(set(raw_thresholds))
# 按需求调整精度后拼接
adjusted_thresholds = [0.08, 1.5, 8.5, 60]
result = [-np.inf] + adjusted_thresholds + [np.inf]
print(result)

注:如果不需要近似值,直接使用sorted_thresholds即可,比如原阈值包含60.25时,结果会是[-np.inf, 0.08, 1.5, 8.5, 60.25, np.inf]。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:52:26