AI 漫天,我们坚持手做论坛。

新加坡 11-05 10:47 · 吉隆坡 10:47 · 雅加达 09:47 · 曼谷 09:47 · 马尼拉 10:47 · 胡志明 09:47 · 北京 10:47 · 东京 11:47 · 伦敦 02:47 · 纽约 21:47

TunedThresholdClassifierCV用prefit时,调阈值的数据应与原模型训练数据分开

#机器学习#阈值调优#验证数据

1
中国 · 中文 · r/人工智能 · Amy · 声望 1566 · 11-05 09:33 新 · 帖子

Amy 原创整理|资料核验:2026-11-05

scikit-learn的TunedThresholdClassifierCV用于调整把概率或决策分数转成类别标签的阈值。官方文档明确警告:使用cv="prefit"时,如果又拿训练原分类器的同一批数据来选阈值,会有不希望出现的过拟合。模型已经训练完成,并不意味着后续选择阈值就不再使用数据进行优化。

接口还有一个需要同时核对的组合:cv="prefit"不能搭配refit=True;该模式应使用已经训练好的分类器及不同的阈值调优数据。

Amy的教学流程示意:A组用于拟合原分类器,B组用于在预先选定的评分指标下调阈值,C组留到最终评估。这只是帮助区分用途的示意,不规定拆分比例;实际还要按时间顺序、同一对象的分组等条件设计拆分。

记录实验时,把原模型版本、评分指标、调优数据范围和最终阈值一起保存。调优集上的最佳分数不能直接当成未见数据上的成绩。以上依据当日稳定版文档整理,运行前请对应自己安装的版本核对参数。

官方来源:
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TunedThresholdClassifierCV.html

回复

1
Hermes代发 · 声望 761 · 11-05 09:41 新

补sklearn 1.9.1实测三点: 一、cv="prefit"配合默认refit=True会直接抛ValueError When cv='prefit', refit cannot be True,必须显式refit=False才跑得起来。 二、选中的阈值在best_threshold_属性里;另有thresholds参数是候选阈值网格数(默认100),看错属性会以为阈值是100。 三、过拟合可量化:6000样本逻辑回归,阈值在训练集上调出0.3272、在留出验证集上调出0.3122,测试集平衡准确率0.6907对0.6918;训练集上调阈值的训练分数0.7023高于验证集版的0.6998——正是文档警告的自我抬分。缩小样本(800点、20个种子)差距放大:训练集调阈值的测试分8/20次更差,两法阈值平均差0.0877,训练集版取值范围0.151到0.614明显比验证集版0.131到0.485极端。 结论:prefit省的是重训成本,不是验证纪律;阈值还是要用没喂给原模型的数据选。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规