使用Scikit-learn包的CalibrationDisplay

举报
yd_37369233 发表于 2026/09/02 20:27:24 2026/09/02
【摘要】 CalibrationDisplay 是 scikit-learn 中用于可视化概率校准曲线(Calibration Curve,也称可靠性图 Reliability Diagram)的一个类。它是在 1.0 版本中新增的。简单来说,它可以帮你直观地检查一个二分类模型预测的概率是否“可信”。比如,一个校准良好的模型,在它预测概率为 0.8 的样本中,大约应有 80% 的样本真实标签为正类。 ...

CalibrationDisplay 是 scikit-learn 中用于可视化概率校准曲线(Calibration Curve,也称可靠性图 Reliability Diagram)的一个类。它是在 1.0 版本中新增的。

简单来说,它可以帮你直观地检查一个二分类模型预测的概率是否“可信”。比如,一个校准良好的模型,在它预测概率为 0.8 的样本中,大约应有 80% 的样本真实标签为正类。

主要创建方法

官方推荐不要直接实例化 CalibrationDisplay 类,而是使用以下两个类方法之一来创建:

  • CalibrationDisplay.from_estimator:当你已经有了一个训练好的分类器时使用。这个方法会自动调用分类器的 predict_proba 方法来获取预测概率。
  • CalibrationDisplay.from_predictions:当你已经有了真实的标签和预测的概率时使用。

核心参数与属性

主要参数

  • prob_true:一个数组,表示每个分箱(bin)中,真实标签为正类的样本比例。
  • prob_pred:一个数组,表示每个分箱中,模型预测概率的平均值。
  • y_prob:一个数组,表示每个样本被预测为正类的概率。
  • pos_label:指定哪个类别被视为“正类”。

主要属性

  • line_:校准曲线的 matplotlib 艺术家(Artist)对象。
  • ax_:包含校准曲线的坐标轴(Axes)对象。
  • figure_:包含整个图形的 matplotlib 图形(Figure)对象。

使用示例

1. 使用 from_estimator

这是最直接的方式,适用于你已有一个训练好的分类器。

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.calibration import CalibrationDisplay

# 1. 准备数据并训练模型
X, y = make_classification(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
clf = LogisticRegression(random_state=0)
clf.fit(X_train, y_train)

# 2. 使用 from_estimator 绘制校准曲线
CalibrationDisplay.from_estimator(clf, X_test, y_test)
plt.show()

2. 使用 from_predictions

适用于你已经通过其他方式计算出了预测概率,或想比较不同模型的场景。

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.calibration import CalibrationDisplay

# 1. 准备数据并训练模型,获取预测概率
X, y = make_classification(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
clf = LogisticRegression(random_state=0)
clf.fit(X_train, y_train)
y_prob = clf.predict_proba(X_test)[:, 1]  # 获取正类的概率

# 2. 使用 from_predictions 绘制校准曲线
CalibrationDisplay.from_predictions(y_test, y_prob)
plt.show()

3. 手动创建(不推荐)

为了完整性,这里展示不推荐的手动创建方式,它需要你先用 calibration_curve 函数计算好数据。

from sklearn.calibration import calibration_curve, CalibrationDisplay

# 假设已有 y_test 和 y_prob
prob_true, prob_pred = calibration_curve(y_test, y_prob, n_bins=10)
disp = CalibrationDisplay(prob_true, prob_pred, y_prob)
disp.plot()
plt.show()

如何解读校准曲线

  • x轴:模型预测的平均概率。
  • y轴:每个概率区间内,真实为正类的样本比例(即“真实概率”)。
  • 完美校准:曲线会紧贴图中的对角线(y=x),表示预测概率与真实概率完全一致。
  • 过度自信(Over-confident):曲线在对角线下方,表示模型的预测概率过高(例如,预测概率0.8的样本,真实概率只有0.6)。
  • 缺乏自信(Under-confident):曲线在对角线上方,表示模型的预测概率过低。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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