gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:10:45 28 4
gpt4 key购买 nike

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

这是带有示例数据集的可重现代码:

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 的差异。这种畸变是怎么来的?

最佳答案

您应该将预测概率传递给 roc_auc_score ,而不是预测的类别。像这样:

yPred_p = model.predict_proba(X_test)[:,1]
print(roc_auc_score(y_test, yPred_p))

# output: 0.9983354140657512

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

enter image description here

重新生成的代码:

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')

关于python - sklearn.roc_auc_score() 和 sklearn.plot_roc_curve() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65249043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com