私は不均衡なデータセットを扱っており、グリッド検索を実行して、scikitのgridsearchcvを使用してモデルのパラメーターを調整します。データをオーバーサンプリングするには、SMOTEを使用したいと思います。これをパイプラインのステージとして含め、gridsearchcvに渡すことができることはわかっています。私の懸念は、smoteが訓練と検証の両方の折り畳みに適用されると思いますが、それはあなたが行うことになっていることではありません。検証セットはオーバーサンプリングしないでください。パイプライン全体が両方のデータセット分割に適用されることは正しいですか?もしそうなら、どうすればこれを好転させることができますか?よろしくお願いします
はい、できますが、 imblearn Pipeline を使用します。
Imblearnには、サンプラーを正しく処理するための独自のパイプラインがあります。これについて 同様の質問 で説明しました。
_imblearn.Pipeline
_オブジェクトでpredict()
を呼び出すと、サンプリングメソッドがスキップされ、次のトランスフォーマーに渡されるデータのままになります。 ソースコードはこちら :
_ if hasattr(transform, "fit_sample"):
pass
else:
Xt = transform.transform(Xt)
_
したがって、これが正しく機能するには、次のものが必要です。
_from imblearn.pipeline import Pipeline
model = Pipeline([
('sampling', SMOTE()),
('classification', LogisticRegression())
])
grid = GridSearchCV(model, params, ...)
grid.fit(X, y)
_
必要に応じて詳細を入力すると、パイプラインが残りの部分を処理します。