2017-01-26 5 views
0

私は、実行するタスクのシーケンス(アップサンプリング、機能選択、分類)を持っているため、Scikitラーニングパイプラインオブジェクトを使用しています。私のアップサンプリング方法はカスタムです。つまり、パイプライン用のカスタムトランスを実装する必要があります。Scikit Learnパイプラインのカスタムトランス

トランスにはトランスフォームとフィッティングの方法が必要です。もちろん、トレーニングデータはアップサンプリングしたいが、テストデータはアップサンプリングしないでください。これは、フィットメソッドを実装するだけで、変換メソッドを実装する必要がないことを意味します(フィットメソッドに渡されたデータセットをアップサンプリングする)か?私が理解するように、変換方法はトレーニングとテストセットの両方に適用されます...

答えて

3

scikit-learnトランスフォーマはサンプル数を変更できません。これはAPIではサポートされていません - http://scikit-learn.org/stable/modules/generated/sklearn.base.TransformerMixin.html#sklearn.base.TransformerMixin.fit_transformを参照 - yとX_new。また、Xだけを返すことに注意してください。これは、Xの次元を変更すると、次元がそれ以上一致しないことを意味します。

これを実行する1つの方法は、パイプラインの外側で実行する方法です。トレーニング用の新しいサンプルを生成し、パイプラインに配置し、テスト用の新しいサンプルを生成しません。しかし、それは動作しません。十字架をつけて

クロスバリデーションとモデル選択を行うには、n_samplesを変更するトランスフォーマをサポートするカスタムPipelineクラスが必要です。たとえば、実装はimbalanced-learnパッケージにあります:hereを参照してください。このパッケージをチェックしてください - アップサンプリングが必要な場合は、アップサンプリング方法がすでに不均衡学習で実装されている可能性があります。

0

私たちは、より複雑なグラフのようなワークフローを構築するためにPipelineの拡張機能であるPipeGraphを開発しました。この種のトリックを行うことができます(https://mcasl.github.io/PipeGraph/のサンプルギャラリーを参照)。

関連する問題