1

scikit-learnのGridSearchCVは、(内部の)クロスバリデーションフォールドのスコアを収集し、次にすべてのフォールドのスコア全体の平均をとっているようです。私はこの背後にある根拠について疑問を抱いていた。一見すると、クロスバリデーションフォールドの予測を収集し、選択したスコアメトリックをすべてのフォールドの予測に適用する方が、より柔軟に見えます。Scikit-learn:GridSearchCVの得点

私がこれを見つけた理由は、cv=LeaveOneOut()scoring='balanced_accuracy'(scikit-learn v0.20.dev0)の不均衡なデータセットでGridSearchCVを使用していることです。バランスのとれた精度(またはリコール)のようなスコアメトリックを左抜きのサンプルに適用することは意味がありません。むしろ、すべての予測を最初に収集してから、すべての予測にスコアメトリックを適用したいと考えています。それとも、これは推論の誤りを伴うのでしょうか?

アップデート:私は予測が最初にすべての内側の折り目から収集され、スコアリング指標が一度適用される差がGridSearchCVに基づいてカスタムグリッドサーチクラスを作成することによって、それを解決しました。

答えて

1

GridSearchCVはスコアリングを使用して、モデルに設定する内部ハイパーパラメータを決定します。

"最適な"ハイパーパラメータのパフォーマンスを見積もる場合は、クロスバリデーションの追加手順を実行する必要があります。あなたはLeaveOneOutbalanced_accuracyを使用したい場合には、各折り目の予測を収集し、それらすべてを獲得するために合理的なようだ私にとって :

は、実際の質問に答えるに近づくためにhttp://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html

EDITを参照してください。私はそれを行うためにあなた自身のグリッドサーチャーを作る必要があると思います。これにはmodel_selection.ParameterGridmodel_selection.KFoldを使用できます。

+0

はい、しかし、私の質問は、その方法を尊重しています_ 'GridSearchCV'はスコアリングを使用しています。これは、内部の相互検証フォールドのそれぞれにスコアリングを個別に適用し、次にすべての内部フォールドの予測を収集してからスコアリングメトリックを1回適用するのではなく、スコアリング全体の平均化を行います。私の場合は、後者がより適切と思われる。 – monade

+0

OK、私はその時質問を誤解しました。私にとっては、 'LeaveOneOut'と' balanced_accuracy'を使いたいならば、それぞれの折り目の予測を集め、それらのすべてをスコアリングすることは妥当と思われます。 私はそれを行うために独自のグリッドサーチャーを作る必要があると思います。そのために 'model_selection.ParameterGrid'と' model_selection.KFold'を使うことができます。 – KPLauritzen

+0

ありがとう@KPLauritzen、私はそれをやろう! – monade