通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

如何用python做auc置信区间

如何用python做auc置信区间

使用Python计算AUC置信区间的步骤

要计算AUC(曲线下面积)的置信区间,可以使用Python中的多个库,包括scikit-learn和统计库,如numpy、scipy等。以下是几种常用的方法:使用交叉验证、使用DeLong方法、使用bootstrap方法。本文将详细介绍这些方法,并给出实现代码示例。

一、使用交叉验证计算AUC置信区间

交叉验证是一种常用的模型评估方法,它通过将数据集分割成多个子集,轮流使用每个子集进行训练和验证,从而获得模型的稳定性和泛化性能。

1.1 交叉验证的基本概念

交叉验证的基本思想是将数据集分成若干个互不相交的子集,然后多次重复训练和验证过程。每次训练时,将某一个子集作为验证集,剩余的子集作为训练集。通过多次重复,可以得到多个评估结果,最终对这些结果进行平均或其他统计处理。

1.2 交叉验证的实现步骤

  1. 数据准备:准备好训练数据和标签。
  2. 模型构建:选择一个合适的分类模型。
  3. 交叉验证划分:将数据集划分为多个子集。
  4. 模型训练和验证:对每个子集进行训练和验证,计算AUC值。
  5. 结果统计:对所有AUC值进行统计,计算置信区间。

1.3 代码示例

import numpy as np

from sklearn.model_selection import StratifiedKFold

from sklearn.metrics import roc_auc_score

from sklearn.linear_model import LogisticRegression

生成示例数据

X = np.random.rand(100, 10)

y = np.random.randint(0, 2, 100)

交叉验证划分

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

auc_scores = []

交叉验证训练和验证

for train_idx, test_idx in cv.split(X, y):

X_train, X_test = X[train_idx], X[test_idx]

y_train, y_test = y[train_idx], y[test_idx]

model = LogisticRegression()

model.fit(X_train, y_train)

y_pred = model.predict_proba(X_test)[:, 1]

auc = roc_auc_score(y_test, y_pred)

auc_scores.append(auc)

计算置信区间

mean_auc = np.mean(auc_scores)

std_auc = np.std(auc_scores)

ci_lower = mean_auc - 1.96 * std_auc / np.sqrt(len(auc_scores))

ci_upper = mean_auc + 1.96 * std_auc / np.sqrt(len(auc_scores))

print(f"AUC: {mean_auc:.3f} ± {1.96 * std_auc / np.sqrt(len(auc_scores)):.3f}")

print(f"95% CI: [{ci_lower:.3f}, {ci_upper:.3f}]")

二、使用DeLong方法计算AUC置信区间

DeLong方法是一种用于比较ROC曲线下面积(AUC)的统计方法。它可以计算AUC的置信区间,并用于比较两个分类器的AUC。

2.1 DeLong方法的基本概念

DeLong方法基于U统计量理论,通过计算ROC曲线的AUC及其方差,来估计AUC的置信区间。它适用于二分类问题,并且可以处理样本量不均衡的情况。

2.2 DeLong方法的实现步骤

  1. 数据准备:准备好训练数据和标签。
  2. 模型构建:选择一个合适的分类模型。
  3. 计算AUC和方差:使用DeLong方法计算AUC及其方差。
  4. 计算置信区间:根据AUC和方差,计算置信区间。

2.3 代码示例

import numpy as np

from sklearn.metrics import roc_auc_score

from scipy.stats import norm

def delong_roc_variance(ground_truth, predictions):

# DeLong ROC AUC variance for a single set of predictions

order = np.argsort(-predictions)

predictions = predictions[order]

ground_truth = ground_truth[order]

distinct_value_indices = np.where(np.diff(predictions))[0]

threshold_idxs = np.r_[distinct_value_indices, ground_truth.size - 1]

tpr = np.cumsum(ground_truth)[threshold_idxs] / ground_truth.sum()

aucs = np.r_[tpr[0], np.diff(tpr)]

v01 = aucs * (1 - aucs) / (ground_truth.sum() - 1)

v10 = aucs * (1 - aucs) / (ground_truth.size - ground_truth.sum() - 1)

return v01, v10

def calc_auc_ci(ground_truth, predictions, alpha=0.95):

auc = roc_auc_score(ground_truth, predictions)

v01, v10 = delong_roc_variance(ground_truth, predictions)

auc_var = v01.sum() + v10.sum()

auc_std = np.sqrt(auc_var)

ci = norm.ppf(1 - (1 - alpha) / 2) * auc_std

return auc, auc - ci, auc + ci

生成示例数据

X = np.random.rand(100, 10)

y = np.random.randint(0, 2, 100)

model = LogisticRegression()

model.fit(X, y)

y_pred = model.predict_proba(X)[:, 1]

计算AUC和置信区间

auc, ci_lower, ci_upper = calc_auc_ci(y, y_pred)

print(f"AUC: {auc:.3f}")

print(f"95% CI: [{ci_lower:.3f}, {ci_upper:.3f}]")

三、使用Bootstrap方法计算AUC置信区间

Bootstrap方法是一种非参数统计方法,通过对数据进行多次重采样,计算出多个AUC值,然后对这些AUC值进行统计分析,估计AUC的置信区间。

3.1 Bootstrap方法的基本概念

Bootstrap方法通过从原始数据集中随机抽取样本(有放回),生成多个新的数据集,然后对每个数据集进行模型训练和验证,计算AUC值。通过对这些AUC值进行统计,可以估计AUC的置信区间。

3.2 Bootstrap方法的实现步骤

  1. 数据准备:准备好训练数据和标签。
  2. 模型构建:选择一个合适的分类模型。
  3. Bootstrap重采样:多次从原始数据集中随机抽取样本,生成多个新的数据集。
  4. 模型训练和验证:对每个新的数据集进行训练和验证,计算AUC值。
  5. 结果统计:对所有AUC值进行统计,计算置信区间。

3.3 代码示例

import numpy as np

from sklearn.metrics import roc_auc_score

from sklearn.utils import resample

from sklearn.linear_model import LogisticRegression

生成示例数据

X = np.random.rand(100, 10)

y = np.random.randint(0, 2, 100)

model = LogisticRegression()

Bootstrap重采样计算AUC

n_bootstraps = 1000

auc_scores = []

for _ in range(n_bootstraps):

X_resampled, y_resampled = resample(X, y, random_state=42)

model.fit(X_resampled, y_resampled)

y_pred = model.predict_proba(X_resampled)[:, 1]

auc = roc_auc_score(y_resampled, y_pred)

auc_scores.append(auc)

计算置信区间

auc_scores = np.array(auc_scores)

mean_auc = np.mean(auc_scores)

ci_lower = np.percentile(auc_scores, 2.5)

ci_upper = np.percentile(auc_scores, 97.5)

print(f"AUC: {mean_auc:.3f}")

print(f"95% CI: [{ci_lower:.3f}, {ci_upper:.3f}]")

总结

以上介绍了三种常用的方法来计算AUC的置信区间:交叉验证、DeLong方法和Bootstrap方法。在实际应用中,可以根据数据的特点和具体需求选择合适的方法。交叉验证适用于评估模型的稳定性,DeLong方法适用于AUC的方差分析和比较,Bootstrap方法则适用于非参数统计分析。通过这些方法,可以更准确地评估模型的性能,并为模型的优化和改进提供依据。

相关问答FAQs:

如何用Python计算AUC的置信区间?
计算AUC(曲线下面积)的置信区间通常涉及到对模型性能的评估。可以使用Bootstrap方法来估计AUC的置信区间。具体步骤包括:

  1. 使用训练集进行多次抽样。
  2. 每次抽样后计算AUC值。
  3. 将这些AUC值进行排序,从中提取出所需百分位数,形成置信区间。

哪些库可以帮助我计算AUC的置信区间?
在Python中,常用的库包括scikit-learn用于计算AUC,numpypandas用于数据处理,以及matplotlib用于可视化结果。此外,可以使用scipy库中的统计工具进行Bootstrap抽样。

AUC的置信区间有什么实际意义?
AUC的置信区间可以反映模型的稳定性和可靠性。较小的置信区间表明模型在不同数据集上的表现一致性较好,而较大的置信区间可能表明模型对数据的敏感度较高,或者样本量不足,从而影响了AUC的估计。

如何判断AUC的置信区间是否足够精准?
要判断AUC的置信区间的精准度,可以通过增加Bootstrap抽样的次数来检查置信区间的稳定性。通常,抽样次数越多,置信区间的估计将越精确。此外,结合其他评估指标(如准确率、F1分数等)也能帮助更全面地评估模型性能。

相关文章