使用Scikit-learn包的calibration_curve

举报
yd_37369233 发表于 2026/09/01 20:59:28 2026/09/01
【摘要】 calibration_curve 是 Scikit-learn 中用于评估二分类模型概率预测准确性的核心工具,它通过生成校准曲线(Calibration Curve,也称可靠性图)来直观地展示模型预测的概率是否与实际发生的概率一致。一个完美校准的模型,其预测概率(如0.8)应意味着该事件实际发生的概率也是0.8。 📝 函数语法与参数sklearn.calibration.calibrat...

calibration_curve 是 Scikit-learn 中用于评估二分类模型概率预测准确性的核心工具,它通过生成校准曲线(Calibration Curve,也称可靠性图)来直观地展示模型预测的概率是否与实际发生的概率一致。

一个完美校准的模型,其预测概率(如0.8)应意味着该事件实际发生的概率也是0.8。

📝 函数语法与参数

sklearn.calibration.calibration_curve(y_true, y_prob, *, pos_label=None, n_bins=5, strategy='uniform')

各个参数的含义与作用如下:

  • y_true真实标签。一维数组,形状为 (n_samples,),包含样本的真实类别(0或1)。
  • y_prob预测概率。一维数组,形状为 (n_samples,),是分类器对正类的预测概率。
  • pos_label (可选):正类的标签。用于明确指定哪个类别是正类,特别是在标签不是0/1时有用。默认为 None

    版本提示:此参数在 Scikit-learn 1.1 版本中新增。

  • n_bins (可选):分箱数量。将 [0, 1] 的概率区间分成多少个箱子,默认为5。箱子越多,曲线越精细,但也需要更多数据支撑。请注意,没有样本的箱子会被丢弃,因此返回的数组长度可能小于 n_bins
  • strategy (可选):分箱策略。默认为 'uniform'
    • 'uniform'等宽分箱,每个箱子的宽度相同。
    • 'quantile'等频分箱,每个箱子包含的样本数量大致相同。

💡 返回值

函数返回一个元组,包含两个重要的 NumPy 数组:

  • prob_true真实概率。数组中的每个值代表对应箱子中,正类样本所占的真实比例。
  • prob_pred预测概率。数组中的每个值代表对应箱子中,所有样本预测概率的平均值。

这两个数组长度相同,可以直接用于绘制校准曲线(通常以 prob_pred 为横轴,prob_true 为纵轴)。

💻 基本使用示例

以下是一个简单的示例:

import numpy as np
from sklearn.calibration import calibration_curve

# 1. 样本真实标签 (1表示正类)
y_true = np.array([0, 0, 0, 0, 1, 1, 1, 1, 1])

# 2. 模型预测为正类的概率
y_pred = np.array([0.1, 0.2, 0.3, 0.4, 0.65, 0.7, 0.8, 0.9, 1.])

# 3. 计算校准曲线数据,指定3个等宽分箱
prob_true, prob_pred = calibration_curve(y_true, y_pred, n_bins=3)

print("真实概率:", prob_true)  # 输出: [0. , 0.5, 1. ]
print("预测概率:", prob_pred)  # 输出: [0.2 , 0.525, 0.85 ]

📊 如何可视化校准曲线

得到 prob_trueprob_pred 后,通常使用 matplotlib 绘制曲线。不过,Scikit-learn 提供了更便捷的可视化方法:

  • CalibrationDisplay.from_estimator:直接传入训练好的分类器和数据,自动完成预测和绘图。
  • CalibrationDisplay.from_predictions:直接传入真实标签预测概率进行绘图。

这两个方法比手动绘图更方便,推荐使用。

⚠️ 重要提示与版本变更

  • normalize 参数已弃用:在 Scikit-learn 1.1 版本中,normalize 参数已被弃用,并将在 1.3 版本中彻底移除。该参数原本用于将非标准化的分数线性映射到 [0, 1] 区间。
  • 正确的输入:应确保 y_prob 输入的是分类器 predict_proba 方法输出的、位于 [0, 1] 区间的标准概率值。
  • 数据量要求n_bins 的设置需要权衡。值过大可能导致部分箱子样本过少,使曲线变得不稳定。

💎 总结

calibration_curve 是评估二分类模型概率校准情况的关键工具。通过生成的校准曲线,你可以直观地判断模型是否存在“过度自信”或“不够自信”的问题,从而决定是否需要采取如 Platt 缩放等张回归等校准操作来提升模型性能。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。