📅  最后修改于: 2023-12-03 14:46:02.582000             🧑  作者: Mango
在机器学习领域,AUC(Area Under the Curve)通常用来评估二分类模型的性能。AUC为ROC曲线(Receiver Operating Characteristic curve)下的面积,其值介于0和1之间。
在这个示例中,我们将介绍如何使用Python绘制AUC曲线并计算95%的置信区间。我们将使用StackOverflow的数据集作为演示数据。
pip install matplotlib numpy scikit-learn
首先,我们需要准备相关的数据集。假设我们已经从StackOverflow上收集到了一些二分类问题的预测结果和真实标签。我们将使用这些数据来计算AUC和置信区间。
下面是一个简单的示例数据集:
import pandas as pd
# 创建示例数据
data = {'y_true': [1, 0, 1, 0, 1, 1, 0, 1, 1, 0],
'y_score': [0.9, 0.7, 0.6, 0.4, 0.3, 0.8, 0.2, 0.5, 0.7, 0.1]}
df = pd.DataFrame(data)
接下来,我们将使用scikit-learn库中的roc_auc_score
函数计算AUC,以及bootstrap
函数计算95%的置信区间。
from sklearn.metrics import roc_auc_score
from sklearn.utils import resample
# 计算AUC
auc = roc_auc_score(df['y_true'], df['y_score'])
# Bootstrap方法计算95%的置信区间
n_iterations = 1000
n_size = int(len(df) * 0.8)
auc_scores = []
for _ in range(n_iterations):
sample = resample(df, n_samples=n_size)
score = roc_auc_score(sample['y_true'], sample['y_score'])
auc_scores.append(score)
# 计算置信区间
alpha = 0.95
p = ((1.0 - alpha) / 2.0) * 100
lower = max(0.0, np.percentile(auc_scores, p))
p = (alpha + ((1.0 - alpha) / 2.0)) * 100
upper = min(1.0, np.percentile(auc_scores, p))
print(f"AUC: {auc:.3f}")
print(f"95% 置信区间: [{lower:.3f}, {upper:.3f}]")
我们可以使用matplotlib库绘制AUC曲线和95%的置信区间。
import matplotlib.pyplot as plt
# 绘制AUC曲线
fpr, tpr, _ = roc_curve(df['y_true'], df['y_score'])
plt.plot(fpr, tpr, label=f'AUC = {auc:.3f}')
# 绘制AUC曲线下的置信区间
plt.fill_between(fpr, tpr, lower, upper, color='gray', alpha=0.3)
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('AUC Curve with 95% Confidence Interval')
plt.legend(loc='lower right')
plt.show()
绘制的曲线将显示AUC值及95%的置信区间。
这就是绘制AUC曲线并计算95%置信区间的示例代码,你可以根据自己的数据集进行调整和使用。希望对你有所帮助!