机器学习模型评估之校准曲线
创作时间:
作者:
@小白创作中心
机器学习模型评估之校准曲线
引用
CSDN
1.
https://blog.csdn.net/a2313179618/article/details/139843052
模型校准曲线(Calibration Curve)是评估分类模型输出概率准确性的关键工具。它通过比较模型预测概率与实际标签分布的一致性,帮助我们理解模型的预测可靠性。本文将详细介绍校准曲线的绘制步骤,并通过Python代码实例展示如何使用scikit-learn库进行校准曲线的绘制和分析。
模型校准曲线(Calibration Curve),也称为可靠性曲线(Reliability Curve)或概率校准曲线(Probability Calibration Curve),是一种评估分类模型输出概率准确性的图形工具。它可以帮助我们理解模型的预测概率是否与实际标签的分布一致。校准曲线通常包括以下步骤:
- 计算模型预测概率:对于测试集中的每个样本,模型会输出一个概率值,表示样本属于正类的概率。
- 将数据分桶:将这些概率值分成若干个等宽的桶(例如10个桶),每个桶中的样本具有相似的预测概率。
- 计算每个桶的平均预测概率和实际正类比例:对于每个桶,计算桶内样本的平均预测概率和实际的正类比例(即标签为正的样本数除以桶内总样本数)。
- 绘制校准曲线:将每个桶的平均预测概率作为x轴,实际正类比例作为y轴,绘制散点图。理想情况下,这些点应该接近于一条斜率为1的直线,这表示模型的预测概率与实际标签完全一致。
- (可选)绘制理想校准曲线:绘制一条斜率为1的直线,作为理想校准曲线,以便与实际校准曲线进行比较。
在Python中,你可以使用scikit-learn库中的calibration模块来绘制校准曲线。以下是一个使用scikit-learn绘制校准曲线的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.calibration import calibration_curve
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.calibration import CalibratedClassifierCV
# 生成数据集
X, y = make_classification(n_samples=10000, n_features=20,
n_informative=2, n_redundant=10,
random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
# 训练模型
# 这里使用RandomForestClassifier作为基础分类器
# 使用CalibratedClassifierCV进行概率校准
clf = RandomForestClassifier(n_estimators=100, random_state=42)
calibrated_clf = CalibratedClassifierCV(clf, method='isotonic', cv=5)
clf.fit(X_train, y_train)
calibrated_clf.fit(X_train, y_train)
# 获取预测概率
probabilities = clf.predict_proba(X_test)[:, 1]
calibrated_probabilities = calibrated_clf.predict_proba(X_test)[:, 1]
# 计算校准曲线
fraction_of_positives, mean_predicted_value = calibration_curve(y_test, probabilities, n_bins=10)
calibrated_fraction_of_positives, calibrated_mean_predicted_value = calibration_curve(y_test, calibrated_probabilities, n_bins=10)
# 绘制校准曲线
plt.figure(figsize=(10, 10))
plt.plot(mean_predicted_value, fraction_of_positives, "s-", label="未校准 (Area = %0.2f)" % np.mean(np.abs(fraction_of_positives - mean_predicted_value)))
plt.plot(calibrated_mean_predicted_value, calibrated_fraction_of_positives, "s-", label="校准 (Area = %0.2f)" % np.mean(np.abs(calibrated_fraction_of_positives - calibrated_mean_predicted_value)))
# 绘制理想校准曲线
plt.plot([0, 1], [0, 1], "k:", label="完美校准")
# 设置图表
plt.xlabel("平均预测概率")
plt.ylabel("实际正类比例")
plt.title('校准曲线')
plt.legend(loc="lower right")
plt.show()
在这个例子中,我们首先创建了一个合成数据集,并使用RandomForestClassifier训练了一个基础分类器。然后,我们使用CalibratedClassifierCV对分类器进行了概率校准。接着,我们计算了测试集上的预测概率,并绘制了校准曲线。最后,我们展示了未校准和校准后的校准曲线,以及理想校准曲线,以便进行比较。
热门推荐
融创房屋漏水问题:业主心声与解决之道
腹泻后放屁,是好转的迹象吗?
魏晋动荡不安,文人追求精神富足,加之玄学和佛教的兴盛助推清谈
天才王勃:短暂而辉煌的一生
叙利亚现在正处于最危险的十字路口
性能更强还更省油 沃尔沃XC60不比宝马奥迪更香?
汽车电瓶如何正确加液?加液过程中有哪些关键步骤?
运动相机值不值得买?从实际使用需求看优劣势分析
夏季胃肠疾病高发:肠道出现这些症状,快去医院!
【储蓄方法】如何储蓄最有效?精选10大无痛快速储蓄攻略
2024国自然提交后,您需要了解的评审安排与评审方式
刷机前如何系统备份照片
爱情中的安全感:如何获得与给予?
提升技能的最佳选择:模拟训练法的优势与应用
古代东陵玉使用历史:从皇家珍藏到民间流传
名医张梅英主任解析:结节性痒疹防治全攻略
孩子得了结节性痒疹用什么药
用AI编辑图像跟Photoshop是一回事?
顺治皇帝的离世之谜:驾崩还是出家?
在经济与文化方面,顺治帝有哪些成就与作为?
如何理解市场中的逐利行为及其影响?这种逐利行为如何进行合理引导?
胃切除术后营养指南:适合患者的汤品与饮食建议
脚踝骨折处有点痒是长骨头了吗?专家解析骨折愈合过程中的瘙痒现象
万代南梦宫谈DEI政策:希望游戏更具多样性包容性
军校体检项目及标准详解:全面解析军校体检要求
成人2型糖尿病患者如何选择降糖药物?
急性肠胃炎吃什么食物可以缓解腹胀气
胃胀能吃益生菌调理吗
工作找不到怎么办非常焦虑
笔记本电脑USB短路导致不识别怎么办?五步解决方案帮你轻松应对