Google'da arama yaptım ve bu hata hakkında stackoverflow yayınına bakın. Benim durumum değiller.sklearn auc ValueError: y_true içinde sadece bir sınıf var
Basit sinir ağını eğitmek ve bölünmüş test veri kümesinde bazı ön tanımlamalar yapmak için keras kullanıyorum. Ama auc hesaplamak için roc_auc_score
kullanın, "ValueError: y_true içinde sadece bir sınıf mevcut. Bu durumda ROC AUC puanı tanımlanmadı".
Hedef etiket dağılımını inceliyorum ve çok dengesiz. Bazı etiketler (toplam 29 etikette) sadece 1 örneğe sahiptir. Bu yüzden test etiketinde hiç pozitif etiket örneği bulunmayacaktır. Yani, sklearn'in roc_auc_score
işlevi, tek bir sınıf sorununu bildirdi. Bu makul.
Ama merak ediyorum, sklearn'in cross_val_score
işlevini kullandığım gibi, AUC hesaplamasını hatasız işleyebilir.
my_metric = 'roc_auc'
scores = cross_validation.cross_val_score(myestimator, data,
labels, cv=5,scoring=my_metric)
Ben
cross_val_score
bir tabakalı çapraz doğrulama verisi bölümünü kullanacak çünkü öyle,
cross_val_score
happend acaba?
== GÜNCELLEME ==
biraz araştırma yapmaya devam, ama yine de bir skorer dönmek için bu cross_val_score çağrısı check_scoring(estimator, scoring=None, allow_none=False)
bkz behind.I fark bulamıyorum ve scorer=SCORERS[scoring]
check_scoring
get_scorer(scoring)
arayacak ,
roc_auc_scorer
Yani
roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True,
needs_threshold=True)
tarafından yapılır;
Ve SCORERS['roc_auc']
roc_auc_scorer
olduğunu hala roc_auc_score işlevini kullanıyor. Cross_val_score'un neden doğrudan roc_auc_score’yu çağırarak farklı davrandığını anlamıyorum.
:
Sen böyle bir şey yapabilir? – maxymoo
@maxymoo 'roc_auc' dizesini kullanıyorum, geçerli bir değer. –
Doğrulamayı geçerseniz ve çok az bir tür etiketiniz varsa, bazı kıvrımlar bu tür etiketlerden yoksun olabilir. Katlama sayısını azaltmayı deneyin ve tabakalı örnekleme kullandığınızdan emin olun. – Kris