Scikit ROC auc raises ValueError: Only one class present in y_true. ROC AUC score is not defined in that case

Scikit ROC auc raises ValueError: Only one class present in y_true. ROC AUC score is not defined in that case

正在尝试创建 ROC 曲线。

model = RandomForestClassifier(500, n_jobs = -1);
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

probas = model.predict_proba(X_test)[:, 1]
precision = metrics.precision_score(y_test, y_pred)    # returns 0.72

recall = metrics.recall_score(y_test.values, y_pred)   # returns 0.35
y_test.shape                                           # (39257, 1)

auc = metrics.roc_auc_score(y_test, probas)            # fails.

ValueError:y_true 中只有一个 class。在这种情况下,ROC AUC 分数未定义。

最后回答了我自己的问题:

已将 y_test 作为 pandas DataFrame 而不是系列导入(已使用 to_csv 保存并使用 from_csv 导入其他地方)。

这在 ROC 曲线上混淆了 scikit,但它似乎对其他任何地方都很满意。

我会把它留在这里(不太可能)有人遇到同样的事情。

有时我们会遇到不平衡的数据集。

就像拆分时一样,有可能 类 中的任何一个都不存在任何数据集(测试数据集) .所以最好在拆分时使用分层技术。

或者如果您在训练 MLP 模型时遇到问题,那么您可以尝试增加“batch_size”

希望对您有所帮助。 谢谢