首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sklearn.roc_auc_score()和sklearn.plot_roc_curve()之间的区别

sklearn.roc_auc_score()和sklearn.plot_roc_curve()之间的区别
EN

Stack Overflow用户
提问于 2020-12-11 17:48:15
回答 1查看 897关注 0票数 3

我想评估一下我的机器学习模型。用roc_auc_score()计算ROC曲线下面积,用sklearn的plot_roc_curve()函数绘制ROC曲线。在第二个函数中,还计算了AUC,并在图中显示。现在我的问题是,我得到了两个AUC不同的结果。

以下是示例数据集的可重现代码:

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import plot_roc_curve
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import MinMaxScaler

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

scaler = MinMaxScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

model = MLPClassifier(random_state=42)
model.fit(X_train, y_train)
yPred = model.predict(X_test)

print(roc_auc_score(y_test, yPred))
plot_roc_curve(model, X_test, y_test)
plt.show()

roc_auc_score函数显示为0.979,曲线图显示为1.00。尽管第二个函数将模型作为参数并再次预测yPred,但结果应该没有什么不同。这不是舍入错误。如果我减少训练迭代以获得一个不好的预测器,则值仍然不同。

使用我的真实数据集,我在两种方法之间“实现”了0.1的差异。这种反常现象是如何产生的?

EN

回答 1

Stack Overflow用户

发布于 2020-12-11 23:33:27

您应该将预测概率传递给roc_auc_score,而不是预测的类。如下所示:

代码语言:javascript
运行
复制
yPred_p = model.predict_proba(X_test)[:,1]
print(roc_auc_score(y_test, yPred_p))

# output: 0.9983354140657512

当您通过预测类时,这实际上是计算AUC的曲线(这是错误的):

重新生成的代码:

代码语言:javascript
运行
复制
from sklearn.metrics import roc_curve, auc
fpr, tpr, _ = roc_curve(y_test, yPred)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, label='AUC = ' + str(round(roc_auc, 2)))
plt.legend(loc='lower right')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65249043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档