sklearn.calibration库中的PlattScaling类的作用是什么
发布时间:2024-01-09 16:31:54
sklearn.calibration库中的PlattScaling类用于校准分类模型的概率输出。
在分类问题中,模型的输出通常是一个预测的类别标签。然而,有些任务需要更为精确的概率输出,例如在二分类问题中,我们可能希望得到样本属于某个类别的概率,以便于进一步评估模型的置信度或者进行后续的决策。
Platt Scaling通过构建一个校准模型来校准分类器的输出概率。它基于经验推断出概率输出和原始分类分数的关系,并利用这个关系矫正模型的输出概率。校准模型可以是一个逻辑回归模型,也可以是其他拟合模型。
使用例子:
import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.calibration import calibration_curve, CalibratedClassifierCV
import matplotlib.pyplot as plt
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 切分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建分类器
clf = LogisticRegression()
# 训练分类器
clf.fit(X_train, y_train)
# 模型预测及准确率
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy before calibration: {accuracy}")
# 校准分类器
calibrated_clf = CalibratedClassifierCV(clf, cv=5, method='sigmoid')
calibrated_clf.fit(X_train, y_train)
# 校准模型预测及准确率
y_pred_calibrated = calibrated_clf.predict(X_test)
accuracy_calibrated = accuracy_score(y_test, y_pred_calibrated)
print(f"Accuracy after calibration: {accuracy_calibrated}")
# 绘制校准曲线
probs = calibrated_clf.predict_proba(X_test)[:, 1]
prob_true, prob_pred = calibration_curve(y_test, probs, n_bins=10)
plt.plot(prob_pred, prob_true, marker='o', linestyle='-', label='Calibration curve')
plt.plot([0, 1], [0, 1], linestyle='--', color='gray', label='Perfectly calibrated')
plt.xlabel('Predicted probability')
plt.ylabel('True probability')
plt.legend()
plt.show()
在这个例子中,我们加载了鸢尾花(iris)数据集,使用逻辑回归分类器进行训练和预测。然后,我们用CalibratedClassifierCV对分类器进行校准。最后,我们绘制了校准曲线来可视化分类器输出的校准程度。
在使用Platt Scaling进行校准之前,分类器的准确率为0.9667。经过校准后,准确率提高到了1.0。从校准曲线可以看出,经过校准后,模型的输出更加接近理想的线性关系,表明校准使得分类器输出的概率更为准确。
总结来说,sklearn.calibration库中的PlattScaling类通过构建校准模型来提高分类器的概率输出的准确性。具体而言,Platt Scaling将分类器的原始输出转换为经过校准的概率输出,从而提高分类模型的可靠性和置信度。
