使用sklearn.calibration进行概率校准的步骤和方法有哪些
发布时间:2024-01-09 16:27:31
概率校准是指在分类问题中,将模型的输出概率值调整到更加准确的概率值。在实际应用中,校准后的概率值更有意义,可以用于评估模型的置信度和进行阈值选择。
sklearn中的calibration模块提供了多种常用的概率校准方法,包括Platt Scaling、Isotonic Regression和Sigmoid Calibration等。下面将介绍这些方法的步骤和使用示例。
1. Platt Scaling(派尔特校准)
Platt Scaling是一种基于逻辑回归的校准方法,步骤如下:
(1)将训练数据集拟合到逻辑回归模型中。
(2)通过预测训练集的置信度得分,拟合得到一个sigmoid函数,将原始概率值映射为校准后的概率值。
使用示例:
from sklearn.datasets import make_classification from sklearn.calibration import CalibratedClassifierCV from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split # 生成一个二分类数据集 X, y = make_classification(n_samples=1000, n_features=10, random_state=42) # 切分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 构建逻辑回归模型 base_model = LogisticRegression() # 构建calibration模型 calibrated_model = CalibratedClassifierCV(base_estimator=base_model, cv=5, method='sigmoid') # 拟合模型 calibrated_model.fit(X_train, y_train) # 预测概率 probabilities = calibrated_model.predict_proba(X_test)[:, 1]
2. Isotonic Regression(等距回归)
Isotonic Regression是一种非参数化的校准方法,它基于一个关于置信度排序的单调递增函数。
使用示例:
from sklearn.datasets import make_classification from sklearn.calibration import CalibratedClassifierCV from sklearn.isotonic import CalibratedClassifierCV from sklearn.model_selection import train_test_split # 生成一个二分类数据集 X, y = make_classification(n_samples=1000, n_features=10, random_state=42) # 切分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 构建逻辑回归模型 base_model = LogisticRegression() # 构建calibration模型 calibrated_model = CalibratedClassifierCV(base_estimator=base_model, cv=5, method='isotonic') # 拟合模型 calibrated_model.fit(X_train, y_train) # 预测概率 probabilities = calibrated_model.predict_proba(X_test)[:, 1]
3. Sigmoid Calibration(sigmoid校准)
Sigmoid Calibration是一种非参数化的校准方法,它通过逻辑函数逼近原始概率值和真实概率值之间的关系。
使用示例:
from sklearn.datasets import make_classification
from sklearn.calibration import CalibratedClassifierCV
from sklearn.calibration import calibration_curve
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# 生成一个二分类数据集
X, y = make_classification(n_samples=1000, n_features=10, random_state=42)
# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建逻辑回归模型
base_model = LogisticRegression()
# 拟合模型
base_model.fit(X_train, y_train)
# 预测概率
probabilities = base_model.predict_proba(X_test)[:, 1]
# 绘制原始概率-真实概率曲线
fraction_of_positives, mean_predicted_value = calibration_curve(y_test, probabilities, n_bins=10)
plt.plot(mean_predicted_value, fraction_of_positives, 's-')
plt.xlabel("平均预测概率")
plt.ylabel("概率正确性")
plt.show()
# 构建calibration模型
calibrated_model = CalibratedClassifierCV(base_estimator=base_model, cv=5, method='sigmoid')
# 拟合模型
calibrated_model.fit(X_train, y_train)
# 预测概率
calibrated_probabilities = calibrated_model.predict_proba(X_test)[:, 1]
# 绘制校准后概率-真实概率曲线
calibrated_fraction_of_positives, calibrated_mean_predicted_value = calibration_curve(y_test, calibrated_probabilities, n_bins=10)
plt.plot(calibrated_mean_predicted_value, calibrated_fraction_of_positives, 's-')
plt.xlabel("校准后平均预测概率")
plt.ylabel("概率正确性")
plt.show()
以上就是使用sklearn.calibration进行概率校准的步骤和方法,包括Platt Scaling、Isotonic Regression和Sigmoid Calibration。这些方法可以提高模型输出概率的准确性,提高模型的可解释性和应用性。
