web-dev-qa-db-ja.com

Scikit-learnでのSmoteとGridsearchcvの併用

私は不均衡なデータセットを扱っており、グリッド検索を実行して、scikitのgridsearchcvを使用してモデルのパラメーターを調整します。データをオーバーサンプリングするには、SMOTEを使用したいと思います。これをパイプラインのステージとして含め、gridsearchcvに渡すことができることはわかっています。私の懸念は、smoteが訓練と検証の両方の折り畳みに適用されると思いますが、それはあなたが行うことになっていることではありません。検証セットはオーバーサンプリングしないでください。パイプライン全体が両方のデータセット分割に適用されることは正しいですか?もしそうなら、どうすればこれを好転させることができますか?よろしくお願いします

10
Ehsan M

はい、できますが、 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)
_

必要に応じて詳細を入力すると、パイプラインが残りの部分を処理します。

15
Vivek Kumar