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

  • 30
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是对乳腺癌数据进行逻辑回归分类的代码,同时计算平均精确率、AUC,并绘制PR曲线与ROC曲线: ```python from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, auc, roc_curve, precision_recall_curve import matplotlib.pyplot as plt # 加载数据 data = load_breast_cancer() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3, random_state=42) # 创建逻辑回归模型 model = LogisticRegression() # 拟合模型 model.fit(X_train, y_train) # 预测测试集 y_pred = model.predict(X_test) y_score = model.decision_function(X_test) # 计算精确率和AUC acc = accuracy_score(y_test, y_pred) fpr, tpr, thresholds = roc_curve(y_test, y_score) roc_auc = auc(fpr, tpr) precision, recall, thresholds = precision_recall_curve(y_test, y_score) pr_auc = auc(recall, precision) print("Accuracy: {:.4f}, AUC: {:.4f}".format(acc, roc_auc)) # 绘制PR曲线 plt.figure() plt.step(recall, precision, color='b', alpha=0.2, where='post') plt.fill_between(recall, precision, alpha=0.2, color='b', step='post') plt.xlabel('Recall') plt.ylabel('Precision') plt.ylim([0.0, 1.05]) plt.xlim([0.0, 1.0]) plt.title('Precision-Recall curve (AUC={:.2f})'.format(pr_auc)) # 绘制ROC曲线 plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (AUC = {:.2f})'.format(roc_auc)) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') 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') plt.legend(loc="lower right") plt.show() ``` 运行以上代码后,你将会得到平均精确率、AUC,并绘制PR曲线与ROC曲线。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值