欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn计算auc的坑----model.predict()和 model.predict_proba()的区别

程序员文章站 2022-07-02 22:37:58
...

sklearn中计算auc的两个函数:

auc()roc_auc_score()

from sklearn.metrics import roc_curve, auc, roc_auc_score

model.predict()model.predict_proba()的区别
model.predict()得到的预测是预测类别结果,如果是二分类,就是0和1;
model.predict_proba()此函数得到的结果是一个多维数组,如果是二分类,则是二维数组,第一列为样本预测为0的概率,第二列为样本预测为1的概率。

使用auc()

注意:在使用roc_auc_score()的时候,其输入为真实标签与预测概率,此处为概率,如果输入了预测标签,那么得到的结果会变差。
因此,在使用roc_auc_score()的时,先用model.predict_proba()函数来得到预测概率,我们在使用的时候,要计算类别1的auc,则要用样本预测为1的概率model.predict_proba(testdata)[:,1]

model = LogisticRegression(class_weight='auto')
X = np.random.rand(10, 2)
y = np.random.randint(2, size=10)
model.fit(X, y)

false_positive_rate, true_positive_rate, thresholds = roc_curve(y, model.predict(X))
print auc(false_positive_rate, true_positive_rate)

roc区间就是关于fpr和tpr的图,因此计算auc,需要先计算fpr和tpr。

下图是一个混淆矩阵的例子,混淆矩阵可以使用metrics.confusion_matrix(testlabels, predictions)得到,testlabels就是测试集的真实标签,predictions就是测试集的预测标签,可由model.predict()得到。
sklearn计算auc的坑----model.predict()和 model.predict_proba()的区别
TPR = TP/(TP + FN) 也称为为—灵敏度
FPR = FP/(FP + TN), 1-FPR=特异度

下图是一个roc例图:
sklearn计算auc的坑----model.predict()和 model.predict_proba()的区别

使用roc_auc_score()
注意:在使用roc_auc_score()的时候,其输入为真实标签与预测概率,此处为概率,如果输入了预测标签,那么得到的结果会变差。
因此,在使用roc_auc_score()的时,先用model.predict_proba()函数来得到预测概率。我们在使用的时候,要计算类别1的auc,则要用样本预测为1的概率model.predict_proba(testdata)[:,1]
注意roc_auc_score()适合用于二分类问题。

rocauc = metrics.roc_auc_score(testlabels, model.predict(testdata))
rocauc_0 = metrics.roc_auc_score(testlabels, model.predict_proba(testdata)[:,0])
rocauc_1 = metrics.roc_auc_score(testlabels, model.predict_proba(testdata)[:,1])
print(rocauc,rocauc_0,rocauc_1)
0.616489651416122 0.048883442265795204 0.9511165577342049

多分类的时候,用auc()计算多个类别的auc:https://blog.csdn.net/NockinOnHeavensDoor/article/details/83384844
多分类roc传送门

多分类tpr和fpr计算: