详解 Scikit-learn 的 metrics.auc函数:计算 AUC 值

  • Post category:Python

sklearn.metrics.auc函数用于计算ROC曲线下的面积(Area Under the Curve),是评估二元分类模型性能的重要指标之一。它的使用方法如下:

sklearn.metrics.auc(x, y)

其中,x和y是array-like类型,分别代表ROC曲线的x轴和y轴坐标。

具体地说,x轴坐标代表1-Specificity(即False Positive Rate),y轴坐标代表Sensitivity(即True Positive Rate)。

通过计算ROC曲线下的面积来评估二元分类模型的性能,AUC的取值范围在0.5到1之间,值越大越好,0.5表示随机猜测,1表示完美分类。

下面提供两个实例来说明sklearn.metrics.auc函数的使用方法:

实例一:

from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt
import numpy as np

# 构造样本数据
y_true = np.array([1, 1, 2, 2])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])

# 计算ROC曲线并绘制
fpr, tpr, thresholds = roc_curve(y_true, y_scores, pos_label=2)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

实例二:

from sklearn import svm
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np

# 构造样本数据
X, y = np.random.randn(10, 2), np.ones(10)
y[:5] = 0

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y)

# 训练支持向量机分类器
clf = svm.SVC(kernel='linear', probability=True)
clf.fit(X_train, y_train)

# 预测并计算ROC曲线
y_score = clf.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_score)
roc_auc = auc(fpr, tpr)

# 绘制ROC曲线
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

以上两个实例都是以绘制ROC曲线为主要目的,首先需要计算ROC曲线下的面积,即sklearn.metrics.auc函数的作用。其中实例一是手动生成样本数据,并通过给定的阈值计算出TPR和FPR,绘制ROC曲线,并计算其面积。实例二利用SVM分类器的预测结果计算出TPR和FPR,绘制ROC曲线,并计算其面积。