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

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()的区别_第1张图片
TPR = TP/(TP + FN) 也称为为—灵敏度
FPR = FP/(FP + TN), 1-FPR=特异度

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

使用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计算:

你可能感兴趣的:(sklearn计算auc的坑----model.predict()和 model.predict_proba()的区别)