我正在训练RandomForestClassifier
(sklearn)来预测信用卡欺诈。然后,当我测试模型并检查rocauc得分时,当我使用roc_auc_score
和plot_roc_curve
时会得到不同的值。 roc_auc_score给我约0.89,plot_curve计算AUC为0.96,为什么?
标签全为0和1,预测均为0或1。 CodE:
clf = RandomForestClassifier(random_state =42)
clf.fit(X_train, y_train[target].values)
pred_test = clf.predict(X_test)
print(roc_auc_score(y_test, pred_test))
clf_disp = plot_roc_curve(clf, X_test, y_test)
plt.show()
代码输出(roc_auc_Score在图形上方)。
答案 0 :(得分:1)
ROC曲线和roc_auc_score将预测概率作为输入,但是正如我从您的代码中看到的那样,您正在提供预测标签。您需要解决该问题。
答案 1 :(得分:0)
您要提供预测类而不是预测概率
roc_auc_score
。
y_score:形状为(n_samples,)或(n_samples,n_classes)形状的数组
目标分数。在二元和多标签情况下,这些值可以是概率估计值,也可以是非阈值决策值(由某些分类器的Decision_function返回)。
将您的代码更改为:
clf = RandomForestClassifier(random_state =42)
clf.fit(X_train, y_train[target].values)
y_score = clf.predict_prob(X_test)
print(roc_auc_score(y_test, y_score))