📜  python plot auc 95% 置信区间 stackoverflow - Python (1)

📅  最后修改于: 2023-12-03 14:46:02.582000             🧑  作者: Mango

Python绘制AUC 95%置信区间—StackOverflow

在机器学习领域,AUC(Area Under the Curve)通常用来评估二分类模型的性能。AUC为ROC曲线(Receiver Operating Characteristic curve)下的面积,其值介于0和1之间。

在这个示例中,我们将介绍如何使用Python绘制AUC曲线并计算95%的置信区间。我们将使用StackOverflow的数据集作为演示数据。

需求
  • Python开发环境
  • 相关数据集
  • matplotlib、numpy和scikit-learn库
安装必要的库
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)
计算AUC和置信区间

接下来,我们将使用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}]")
可视化AUC曲线和置信区间

我们可以使用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%置信区间的示例代码,你可以根据自己的数据集进行调整和使用。希望对你有所帮助!