scikit-learn で不均衡なクラスを処理する標準的な方法はありますか?
sk-learn の利点の 1 つは、一貫したインターフェイスがあることです...
ただし、クラスが不均衡な場合[これはかなり一般的なユースケースのようです)、これは当てはまりません: IMO は分類を必要としませんが、auc_score (または同様のもの) を計算できるように 0 と 1 の間の連続変数を必要とします。
したがって、ロジスティックおよび他のいくつかの分類子で auc_score(y,cf.predict_probas(X)) を実行できますが、任意の decision_function に対して基本的に同じことを実行できない理由はわかりません [例 RidgeClassifier ... など] 、つまり、しきい値を変更し、誤報、ヒット率を監視しますか?
人々はこれをどのように行うのですか?これは私がやっていることです(オグリセルも提案したように)
if hasattr(clf,'predict_proba'):
proba=clf.predict_proba(X_test)[:,1]
score=metrics.auc_score(y_test,proba)
elif hasattr(clf,'decision_function'):
z=clf.decision_function(X_test)
fpr, tpr, thresholds = metrics.roc_curve(y_test, z)
score=metrics.auc(fpr, tpr)