2017-06-13 3 views
0

私はsklearnのロジスティック回帰分類器を訓練しました。私のベースフィーチャファイルには65のフィーチャがあり、今度は2次の組み合わせを考慮して1000に外挿しました(PolynomialFeatures()を使用)。そして、Select-K-Best()メソッドで100に戻しました。未知のテストセットでのSelect-K-bestの使用

しかし、いったん私のモデルを訓練して、新しいtest_fileを取得すると、それは65の基本機能しか持たないだろうが、私のモデルはそれらの100を期待している。

だから私はSelect-K-Best.fitに必要とされるラベルを知らないとき、どのように私は(私のテスト・セットで選択-K-ベスト()メソッドを適用することができます)機能

答えて

2

ますテストデータでSelectKBestにもう一度合ってはいけません - 代わりにトレーニングと同じ(既に合っている)SelectKBestインスタンスを使用してください。私。 .fitメソッドではなく、テストデータに対してのみ.transformメソッドを使用してください。

scikit-learnは、複数のステップを簡単に管理できるユーティリティを提供します。それはPipelineと呼ばれます。あなたのケースでは(make_pipelineヘルパー経由)そのようなものでなければなりません:

pipe = make_pipeline(
    PolynomialFeatures(2), 
    SelectKBest(100), 
    LogisticRegression() 
) 
pipe.fit(X_train, y_train) 
y_pred = pipe.predict(X_test) 
+0

ありがとう! 私の場合、トレーニング後にモデルを保存し(ファイルに保存する)、テストのために再度読み込む必要があります。 私はfit'ed SelectKBestをファイルに保存してテストのために読み込む必要があると思います。 現在、私はnumpy配列(選択されたK機能へのインデックスを含む)をファイルに格納し、テスト中にロードします。 これを行う簡単な方法はありますか? –

+1

パイプラインオブジェクト全体、つまり 'pipe'変数を(pickleまたはjoblibを使って)ダンプするだけです。詳細はhttp://scikit-learn.org/stable/modules/model_persistence.html#model-persistenceを参照してください。 –

関連する問題