当我们需要度量一个分类模型的性能时,我们经常会使用一些指标,比如准确率,召回率和F1-Score等。其中,AUC (Area Under the ROC Curve) 指标比较适合用于分类器在非平衡(不同类别样本数量有差别)数据集上进行评价。本文将会提供一个Python示例,展示如何使用一些常用的Python库来计算模型的AUC。
实现AUC的计算
要计算AUC,我们需要首先计算出ROC曲线。ROC(Receiver Operating Characteristic)曲线是一种度量二元分类器的性能的曲线。它显示了不同的分类阈值,根据阈值计算TP(真正例数)和FP(伪正例数),并根据TP和FP的比率(TPR(真正例率)= TP /(TP + FN),FPR(假正例率)= FP /(FP + TN))制成。在这里,TPR是正确预测的正例数量占总正例数量的比例,而FPR是错误预测的正例数量占总正例数量的比例.
为了生成ROC曲线,我们需要计算出不同阈值下的TPR和FPR,然后绘制出ROC曲线。由于每个点在ROC曲线上对应一个特定的阈值,所以AUC表示曲线下的面积(AUC = ROC曲线下面的面积)。 AUC的取值范围在0到1之间,0表示模型的分类器为随机选择,而1表示分类器在所有情况下都预测得到正确结果。
使用Python常用库计算AUC的代码如下:
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
import numpy as np
# 定义真实标签和预测标签
y_true = np.array([1, 0, 1, 1, 0, 1, 0, 1, 0, 1])
y_score = np.array([0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0])
# 计算ROC曲线
fpr, tpr, thresholds = roc_curve(y_true, y_score)
# 计算AUC
auc = roc_auc_score(y_true, y_score)
# 绘制ROC曲线
plt.plot(fpr, tpr, label = "AUC = {:.3f}".format(auc))
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.title("ROC Curve")
plt.legend(loc = "lower right")
plt.show()
这段代码的输出是一个带有AUC信息的ROC曲线,展示了用于分类的真实标签和模型的预测标签。为了演示该代码的效果,我们以一个简单的二分类问题为例,输入真实标签(y_true)和模型预测标签(y_score)来计算AUC。然后,我们使用roc_curve函数计算FPR和TPR、绘制ROC曲线、计算AUC,并在图像的右下角添加AUC信息。
示例1:使用SVM模型进行AUC计算
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn import svm
# 导入数据
cancer = load_breast_cancer()
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
cancer.data, cancer.target, random_state = 0)
# 构建svm模型
svm_clf = svm.SVC(probability=True)
# 训练模型
svm_clf.fit(X_train, y_train)
# 预测可能性
svm_probs = svm_clf.predict_proba(X_test)[:, 1]
# 计算AUC
svm_auc = roc_auc_score(y_test, svm_probs)
print("AUC of SVM model is :", svm_auc)
在此示例中,我们使用一个基于SVM的分类器来调查乳腺癌数据集中的AUC。我们首先导入数据集并划分数据集为训练集和测试集。然后,我们建立SVM模型,训练模型,并使用predict_proba方法在测试集上产生预测作为模型预测标签。接下来,以预测概率为基础,计算出AUC,并将结果打印在屏幕上。
示例2:使用Random Forest模型进行AUC计算
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 导入数据
cancer = load_breast_cancer()
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
cancer.data, cancer.target, random_state = 0)
# 构建Random Forest模型
rf_clf = RandomForestClassifier(n_estimators=100)
# 训练模型
rf_clf.fit(X_train, y_train)
# 预测可能性
rf_probs = rf_clf.predict_proba(X_test)[:, 1]
# 计算AUC
rf_auc = roc_auc_score(y_test, rf_probs)
print("AUC of Random Forest model is:", rf_auc)
在此示例中,我们使用基于随机森林的模型进行乳腺癌数据集的AUC调查。与示例1相似,我们首先导入数据,并分割数据集为训练集和测试集。然后,我们建立一个基于随机森林的模型,并使用predict_proba方法在测试集上进行预测得到模型预测标签。接着,根据预测概率计算AUC,并将结果打印在屏幕上。
这两个示例都展示了如何计算AUC,以评估分类算法在非均衡的数据集上的性能。在这两个示例中,我们使用了几个不同的模型,并使用相同的计算公式来计算AUC。由于不同的模型具有不同的性能和处理时间,因此在实际中,我们可以使用不同的模型来开发分类算法,然后通过AUC将它们进行比较,并选择一个最优的模型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现计算AUC的示例代码 - Python技术站