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()
得到。
TPR = TP/(TP + FN) 也称为为—灵敏度
FPR = FP/(FP + TN), 1-FPR=特异度
下图是一个roc例图:
使用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计算: