Szukałem google i widzę post kroczący o tym błędzie. To nie są moje przypadki.sklearn auc ValueError: Tylko jedna klasa obecna w y_true
Używam kerasów do trenowania prostej sieci neuronowej i przygotowania predykcji do podzielonego zestawu danych testowych. Ale kiedy używam roc_auc_score
do obliczenia auc, otrzymałem "ValueError: Tylko jedna klasa obecna w y_true. Wynik ROC AUC nie jest zdefiniowany w tym przypadku.".
Sprawdzam dystrybucję etykiet docelowych i są one wysoce niezrównoważone. Niektóre etykiety (w sumie 29 etykiet) mają tylko 1 instancję. Jest więc prawdopodobne, że nie będą mieć żadnej pozytywnej instancji etykiety na etykiecie testowej. Tak więc funkcja roc_auc_score
sklearn zgłosiła jedyny problem z jedną klasą. To uzasadnione.
Ale jestem ciekawy, jak gdy używam funkcji sklearn cross_val_score
, może obsłużyć obliczenia AUC bez błędu.
my_metric = 'roc_auc'
scores = cross_validation.cross_val_score(myestimator, data,
labels, cv=5,scoring=my_metric)
Zastanawiam się, co wydarzyło się w cross_val_score
, czy to dlatego, że cross_val_score
użyć warstwowy podział poprzeczny sprawdzania poprawności danych?
== == AKTUALIZACJA
I nadal zarobić trochę kopania, ale wciąż nie może znaleźć różnicę behind.I zobaczyć, że wezwanie cross_val_score check_scoring(estimator, scoring=None, allow_none=False)
zwrócić strzelców, a check_scoring
wezwie get_scorer(scoring)
który powróci scorer=SCORERS[scoring]
A SCORERS['roc_auc']
jest roc_auc_scorer
;
roc_auc_scorer
dokonuje
roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True,
needs_threshold=True)
So, nadal używa funkcji roc_auc_score. Nie rozumiem dlaczego cross_val_score zachowuje się inaczej przy bezpośrednim wywoływaniu roc_auc_score.
co jest 'my_metric'? – maxymoo
@maxymoo Używam łańcucha 'roc_auc', jest to poprawna wartość. –
Jeśli wykonujesz krzyżową walidację i masz za mało jednego rodzaju etykiety, niektóre fałdy mogą być pozbawione takich etykiet. Spróbuj zmniejszyć liczbę zagięć i upewnij się, że używasz warstwowego próbkowania. – Kris