2016-12-10 4 views
0

パイプラインとGridSearchCVを使用して機能を自動的に選択しています。データセットが小さいので、GridSearchCVでパラメータ 'cv'をStratifiedShuffleSplitに設定しました。GridSearchCVのデータ全体ではなく、パイプラインのトランスフォーマーがトレーニングデータに作用する

selection = SelectKBest() 

clf = LinearSVC() 

pipeline = Pipeline([("select", selection), ("classify", clf)]) 

cv = StratifiedShuffleSplit(n_splits=50) 

grid_search = GridSearchCV(pipeline, param_grid=param_grid, cv = cv) 

grid_search.fit(X, y) 

私が "を分ける場合、結果が異なってくるので、SelectKBestは、各分割の代わりに、データセット全体(後者は、私が欲しいものである)のトレーニングデータに作用すると思われ、次のようなコードに見えますSelect 'と' classify 'を実行します。ここで、StratifiedShuffleSplitは、分類子にのみ作用します。

この場合、パイプラインとGridSearchCVを使用する正しい方法は何ですか?どうもありがとう!

答えて

0

パイプライン全体を相互検証する(つまり、各分割のトレーニング部分でのみSelectKBestを実行する)方法があります。それ以外の場合、モデルはテスト部分を見ることができます。つまり、品質推定値が間違っていることを意味します。これらの不公平な品質推定値で見出される最良のハイパーパラメータは、実際の見えないデータでも悪化する可能性があります。

予測時に、SelectKBestを(トレーニングデータセット+予測する例)で再実行せずに、分類子を再トレーニングしないと、なぜ評価でそれを行いますか?

+0

これは、このトピックについて説明している論文http://dx.doi.org/10.1093/bioinformatics/btp621の正しいリンクです。 –

関連する問題