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

DecisionTreeDiscretiser离散化输出为小数,如何获取原始分箱区间?

你观察到的小数输出不是归一化结果,是DecisionTreeDiscretiser默认返回的每个分箱对应的正样本标签均值,你示例中的两个值恰好对应分箱内class=1的占比:第一个箱(foo值为1)里3个样本有1个正类,占比1/3≈0.3333;第二个箱(foo值为3)里4个样本有3个正类,占比3/4=0.75。

方法1:从训练好的离散器中提取分箱区间

DecisionTreeDiscretiser训练完成后,会将每个特征拟合的决策树阈值存在bins_dict_属性中,直接读取该属性拼接区间即可,示例代码如下:

# 接你已有的训练代码
disc = DecisionTreeDiscretiser(cv=3)
disc.fit(data, data['class'])

# 获取foo列的分箱阈值
foo_thresholds = disc.bins_dict_['foo']
# 排序阈值后拼接为区间
sorted_thresh = sorted(foo_thresholds)
bins = [f"(-inf, {sorted_thresh[0]}]"]
for i in range(1, len(sorted_thresh)):
    bins.append(f"({sorted_thresh[i-1]}, {sorted_thresh[i]}]")
bins.append(f"({sorted_thresh[-1]}, inf]")

print("foo列分箱区间:", bins)
# 你的示例输出为:['(-inf, 2]', '(2, inf]']

方法2:直接让transform返回区间(更便捷)

如果不需要概率值,想让转换结果直接显示所属区间,初始化离散器时添加return_interval=True参数即可:

# 初始化时指定返回区间格式
disc = DecisionTreeDiscretiser(cv=3, return_interval=True)
disc.fit(data, data['class'])
train_t = disc.transform(data)
print(train_t['foo'].unique())
# 你的示例直接输出:['(-inf, 2.0]', '(2.0, inf]']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:02