使用Scikit-learn包的calibration_curve
【摘要】 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_true 和 prob_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)