1. ホーム
  2. python

[解決済み] scikit-learn .predict() デフォルトの閾値

2023-02-05 22:46:34

質問

クラスが偏っている(1が5%)分類問題に取り組んでいます。私は、確率ではなく、クラスを予測したいです。

2値分類の問題で、scikitの classifier.predict() を使って 0.5 をデフォルトで使うのですか? そうでない場合、デフォルトの方法は何ですか?もしそうなら、どのようにそれを変更しますか?

scikitでは、いくつかの分類器には class_weight='auto' オプションがありますが、すべてではありません。この場合 class_weight='auto' では .predict() は実際の人口比率を閾値として使用するのでしょうか?

のような分類器でこれを行うにはどうしたらよいでしょうか? MultinomialNB をサポートしない class_weight ? を使用する以外に predict_proba() を使って、自分でクラスを計算することです。

どのように解決するのですか?

<ブロッククオート

はscikitの classifier.predict() はデフォルトで0.5を使っているのでしょうか?

確率的分類器では、そうです。他の人が説明したように、数学的な観点から唯一の賢明な閾値です。

<ブロッククオート

をサポートしないMultinomialNBのような分類器でこれを行うにはどうしたらよいでしょうか? class_weight ?

を設定することができます。 class_prior であり、これは事前確率 P( y )であり、クラスごとの y . これにより,効果的に判定境界を移動させることができます.例

# minimal dataset
>>> X = [[1, 0], [1, 0], [0, 1]]
>>> y = [0, 0, 1]
# use empirical prior, learned from y
>>> MultinomialNB().fit(X,y).predict([1,1])
array([0])
# use custom prior to make 1 more likely
>>> MultinomialNB(class_prior=[.1, .9]).fit(X,y).predict([1,1])
array([1])