【问题标题】:Got a wierd ROC curve and AUC of a classifier得到了一个奇怪的 ROC 曲线和分类器的 AUC
【发布时间】:2020-10-01 17:33:06
【问题描述】:

我的训练数据集有 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 个训练样本的分类器怎么能给你这个?我做错了什么?

【问题讨论】:

    标签: python pandas numpy machine-learning classification


    【解决方案1】:

    不一定是错的。我们必须问自己,坐标轴是什么意思。它们是真阳性率和真阴性率。即正确和错误地标记为“正类”的项目的比例。

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

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

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

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

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

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

    ^ 同样的解释在这里成立。让我们再移动一次滑块:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 2012-04-15
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      相关资源
      最近更新 更多