欢迎访问宙启技术站
智能推送

使用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。这些方法可以提高模型输出概率的准确性,提高模型的可解释性和应用性。