使用Scikit-learn包的CalibrationDisplay
【摘要】 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)