具有分类器的ROC曲线和AUC曲线

问题描述 投票:0回答:1

我的训练数据集有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曲线。

enter image description here

这显然是错误的!我的意思是,一个带有9个样本进行训练的分类器如何为您提供呢?我做错了吗?

python pandas numpy machine-learning classification
1个回答
0
投票

不一定是错误的。我们必须自问轴是什么意思。它们是真实的正利率和真实的负利率。即,正确和错误地标记为“正类”的项目的实际情况。

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

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

^这里,左边什么都没有,因此0件事被正确或错误地分类为正。所以两个轴都为0,让我们将其移到1:

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

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

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

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

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

^至此。实际为正的所有事物都被正确地标记为正,而所有为负的事物(即一件事)被错误地标记为正(因此为假正)。这就是为什么这些曲线总是在对角线处开始和结束的原因。

我的意思是你也可能把东西弄乱了...

© www.soinside.com 2019 - 2024. All rights reserved.