2017-11-19 5 views
0

RFECVと機能選択をしようとしましたが、その度に異なる結果が出ています。クロスバリデーションはサンプルXをランダムなチャンクまたはシーケンシャルな確定的なチャンク?sklearn.feature_selection.RFECVが実行ごとに異なる結果を返すのはなぜですか

また、grid_scores_score(X,y)のスコアが異なるのはなぜですか?なぜスコアがマイナスになるのでしょうか?

+0

これらの質問に具体的に答えられるように、コードをご記入ください。 – amanbirs

答えて

2

クロス検証では、サンプルXをランダムなチャンクまたはシーケンシャルな確定的なチャンクに分割しますか?

CVは、デフォルトでデータを確定的なチャンクに分割します。この動作を変更するには、シャッフルパラメータをTrueに設定します。

しかし、RFECV Yが

http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFECV.html)バイナリまたはマルチクラスである場合、これは、それが各折り目が同じ(またはクラスのほぼ同じ比を有することをデータは、分割することを意味sklearn.model_selection.StratifiedKFoldを使用)。これを行うために、各折りたたみの正確なデータは、CVの異なる反復でわずかに変化する可能性があります。ただし、これによりデータが大幅に変更されることはありません。

cvパラメータを使用してCVイテレータを渡す場合は、ランダムな状態を指定して分割を修正できます。ランダム状態は、アルゴリズムによって行われるランダムな決定にリンクされます。同じランダムな状態を毎回使用すると、同じ動作が保証されます。

また、grid_scores_とscore(X、y)のスコアが異なるのはなぜですか?

grid_scores_は、クロスバリデーションスコアの配列です。 grid_scores_ [i]は、i番目の反復のクロスバリデーションスコアです。これは、最初のスコアがすべてのフィーチャのスコアであり、2番目のフィーチャがフィーチャの1つのセットが削除されたときのスコアであることを意味します。それぞれ削除されるフィーチャの数は、stepパラメータの値と同じです。これはデフォルトでは1です。

score(X、y)は最適なフィーチャ数を選択し、それらのフィーチャのスコアを返します。

なぜスコアがマイナスになるのですか?

これは、使用している推定量とスコアラーによって異なります。スコアラーを設定していない場合、RFECVは見積もりにデフォルトのスコア関数を使用します。一般的に、これは精度ですが、あなたの特定のケースでは、負の値を返すものかもしれません。

+1

また、分割を修正するために使用できるStratifiedKFoldのrandom_stateパラメータを追加してください –

関連する問題