相关疑难解决方法(0)

sklearn auc ValueError:y_true中只有一个类

我搜索了Google,看到了一些有关此错误的StackOverflow帖子.他们不是我的情况.

我使用keras训练一个简单的神经网络,并对分裂的测试数据集做出一些预测.但是当用于roc_auc_score计算AUC时,我得到以下错误:

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

我检查目标标签分布,它们是高度不平衡的.一些标签(总共29个标签中)只有一个实例.因此,它们可能在测试标签中没有正面标签实例.所以sklearn的roc_auc_score函数报告了唯一的一个类问题.那是合理的.

但我很好奇,因为当我使用sklearn的cross_val_score功能时,它可以毫无错误地处理AUC计算.

my_metric = 'roc_auc' 
scores = cross_validation.cross_val_score(myestimator, data,
                                   labels, cv=5,scoring=my_metric)
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么cross_val_score,是不是因为cross_val_score使用了分层的交叉验证数据?


更新
我继续做一些挖掘,但仍然无法找到背后的差异.我看到cross_val_score调用check_scoring(estimator, scoring=None, allow_none=False)返回一个得分手,check_scoring并将调用get_scorer(scoring)将返回scorer=SCORERS[scoring]

SCORERS['roc_auc']roc_auc_scorer;
roc_auc_scorer被由

roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True,
                                 needs_threshold=True)
Run Code Online (Sandbox Code Playgroud)

所以,它仍然使用roc_auc_score函数.我不明白为什么cross_val_score与直接调用roc_auc_score的行为不同.

scikit-learn

12
推荐指数
1
解决办法
1万
查看次数

roc_auc_score - y_true中只有一个类

我在现有的数据帧上做了k-fold XV,我需要获得AUC分数.问题是 - 有时测试数据只包含0,而不是1!

我尝试使用示例,但使用不同的数字:

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 0, 0])
y_scores = np.array([1, 0, 0, 0])
roc_auc_score(y_true, y_scores)
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

ValueError:y_true中只有一个类.在这种情况下,没有定义ROC AUC分数.

是否有任何解决方法可以使其在这种情况下工作?

python scikit-learn auc

8
推荐指数
1
解决办法
9953
查看次数

标签 统计

scikit-learn ×2

auc ×1

python ×1