如何从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
相关产品推荐
相关产品推荐

