得到了一个奇怪的 ROC 曲线和分类器的 AUC

Got a wierd ROC curve and AUC of a classifier

我的训练数据集有 9 行(样本)和 705 列(特征+目标)(Train_5,y_train_5)

我的测试数据集有 17 行和 705 列(我知道拆分不对)(Test_5, y_test_5)

首先我这样做:

clf = GradientBoostingClassifier ()
fit = clf.fit(Train_5, y_train_5)
y_predicted2 = clf.predict(Test_5)
c_report = classification_report(y_test_5, y_predicted2)
print('\nClassification report:\n', c_report)



Classification report:
           precision    recall  f1-score   support

       0       0.13      1.00      0.24         2
       1       1.00      0.13      0.24        15

这个结果是正常的。但是当我想画ROC曲线的时候,它给了我完整的东西,AUC是1!

y_predicted = clf.predict_proba(Test_5)[:, 1]
false_positive, true_positive, _ = roc_curve(y_test_5, y_predicted)
auc = roc_auc_score(y_test_5, y_predicted)
auc
1

这是ROC曲线

这显然是错误的!我的意思是一个有 9 个训练样本的分类器怎么能给你这个?我做错了什么?

不一定是错的。我们必须问问自己轴的含义。它们是真阳性率和真阴性率。即正确和错误标记为 "positive class" 的项目的分数。

如果你的 9 个样本中有 8 个是真正的阳性而最后一个是真正的阴性。这个有可能。想象一下,使用一个滑块并将左侧的所有内容分类为正面,将右侧的所有内容分类为负面。想想你的真阳性率和真阴性率是多少(为简单起见,我总共使用 5 个)

|+|+|+|+|-|
^  

^这里,左边什么都没有,所以有 0 个东西被正确或错误地分类为阳性。所以两个轴都是0,让我们把它移到1:

|+|+|+|+|-|
  ^  

^在这里,左边的所有东西都是正的并且分类正确,我们没有任何误报。沿线的每个点都是这种情况

|+|+|+|+|-|
        ^

^ 同样的解释也适用于这里。让我们再移动一次滑块:

|+|+|+|+|-|
          ^

^至此。一切实际上是积极的都被正确地标记为积极,一切消极的事情(即一件事)都被错误地标记为积极(因此是假阳性)。这就是为什么这些曲线总是在对角线开始和结束。

我的意思是你也可能把事情搞砸了...