簡體   English   中英

獲取 roc_auc_score nan 用於多類分類的交叉驗證

[英]getting roc_auc_score nan for cross validation of multiclass classification

我正在研究一個多類分類問題,其中包含 3 個類的不平衡數據,我使用 layerifiedkfolds 拆分數據並使用 SMOTE 方法對其進行過采樣。 當我使用交叉驗證來評估我的模型時,我得到了 F1_score 的結果,但對於 roc_auc 我只得到了 nan 值

for key, classifier in classifiers.items():
    classifier.fit(X_sm, y_sm)
    training_score1 = cross_val_score(classifier, X_sm, y_sm,scoring=make_scorer(f1_score, average='macro', labels=[2]), cv=5)
    print("Classifiers: ", classifier.__class__.__name__, "Has a training score of", round(training_score1.mean(), 2) * 100, "% F1  score")
    training_score2 = cross_val_score(classifier, X_sm, y_sm,scoring=make_scorer(roc_auc_score, average='macro',multi_class='ovo'), cv=5)
    print("Classifiers: ", classifier.__class__.__name__, "Has a training score of", round(training_score2.mean(), 2) * 100, "% Roc_auc score")

X_sm 和 y_sm 都是 arrays 並且在這種情況下的結果是:

Classifiers:  LogisticRegression Has a training score of 77.0 % F1  score
Classifiers:  LogisticRegression Has a training score of nan % Roc_auc score
Classifiers:  KNeighborsClassifier Has a training score of 94.0 % F1  score
Classifiers:  KNeighborsClassifier Has a training score of nan % Roc_auc score
Classifiers:  SVC Has a training score of 89.0 % F1  score
Classifiers:  SVC Has a training score of nan % Roc_auc score
Classifiers:  DecisionTreeClassifier Has a training score of 83.0 % F1  score
Classifiers:  DecisionTreeClassifier Has a training score of nan % Roc_auc score

我嘗試使用cross_validate但它對我不起作用。

auROC 指標需要連續的置信度測量,而不是硬的 class 預測,因此您需要設置needs_proba=Trueneeds_threshold=True 后者使用分類器的decision_functionpredict_proba ,而第一個只嘗試使用predict_proba 由於 SVM 本身不是概率性的,因此您需要needs_threshold (不要為 F1 設置其中任何一個,它只使用硬 class 預測。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM