本关任务:填写 python 代码,完成 AUC 函数实现计算 AUC。
时间: 2024-09-12 11:12:31 浏览: 52
AUC(Area Under the Curve)通常是指接收者操作特征曲线(Receiver Operating Characteristic,ROC曲线)下的面积,用于衡量分类器在所有可能阈值上的性能。在二分类问题中,ROC曲线是真阳性率(TPR)对假阳性率(FPR)的图表,而AUC值则是该曲线下的面积。AUC值的范围在0到1之间,值越大表示模型性能越好。
以下是使用Python实现计算AUC的函数的一个基本示例:
```python
import numpy as np
import sklearn.metrics as metrics
def compute_auc(sorted_labels, sortedScores):
# 初始化变量
fpr = 0.0
tpr = 0.0
total_positives = 0.0
total_negatives = 0.0
auc = 0.0
# 计算正负样本总数
for i in range(len(sorted_labels)):
if sorted_labels[i] == 1:
total_positives += 1
else:
total_negatives += 1
# 遍历所有阈值,计算TPR和FPR
prev_score = -1.0
for i in range(len(sorted_labels)):
current_score = sortedScores[i]
current_label = sorted_labels[i]
if current_score != prev_score:
# 更新TPR和FPR
fpr = float(total_negatives - (i + 1) + 0.5) / total_negatives
tpr = float(total_positives - (i + 1) + 0.5) / total_positives
auc += tpr * (fpr - prev_fpr)
prev_fpr = fpr
prev_score = current_score
return auc
# 示例使用
labels = np.array([1, 1, 1, 1, 0, 0, 0, 0, 0]) # 真实标签
scores = np.array([0.9, 0.85, 0.8, 0.7, 0.6, 0.55, 0.5, 0.4, 0.3]) # 预测得分
sorted_labels, sortedScores = zip(*sorted(zip(labels, scores), key=lambda x: x[1], reverse=True))
auc_value = compute_auc(sorted_labels, sortedScores)
print(f"AUC Value: {auc_value}")
```
请注意,这个函数是一个简化的AUC计算示例,它没有处理一些特殊情况,如平滑处理(例如,当两个点具有相同的预测分数时)。在实际应用中,可以直接使用诸如scikit-learn这样的库中的现成函数来计算AUC,如上面代码中的`metrics.roc_auc_score`函数。
阅读全文