2016-12-28 3 views
1

私はFunctionTransformのユースケースを用意しています。トレーニングサンプルは、何らかの基準に基づいて真のラベルとともにソートする必要があります。Pipelineの一部であるときにFunctionTransformインスタンスにyを渡すことができません

def sort_examples(X, y=None): 
    Xt, indices = zip(*map(itemgetter(1, 2), 
         sorted([(x.nnz, x, i) for i, x in 
           enumerate(X)], key = itemgetter(0)))) 
    if y is not None: 
     yt = [yy[idx] for idx in indices] 
    return(Xt, yt) 

classifier = Pipeline(steps=[ 
('sorter', FunctionTransformer(func=sort_examples, 
           validate=False, 
           accept_sparse=True, 
           pass_y=True)), 
('classifier', DummyClassifier())]) 

問題は、私は(yがあまりにも変換する必要があるため)pass_y = Trueを渡すことで、私の実装の機能をラップパイプラインにおけるFunctionTransformインスタンスを埋め込む際に、パイプラインが意図的に> .fit < FunctionTransformインスタンスを呼び出すことにより、Yをドロップしますです(x、y).transform(x)変換されたyを返さずに返します。

結果として、トレーニングサンプルは変換され、ソートされますが、真のラベルは関連付けられません。

私の現在の仕事はfit_transformを持つFunctionTransformと、sklearn.FunctionTransform.transformメソッドを明示的にしかし暗黙的にyを強制するためにfit_transform body内で呼び出すことによるパッチです。

このユースケースが、FunctionTransformが設計されているもので正当であるかどうかはわかりません。任意のscikit-学ぶ専門家は提案や訓練例と我々はPipeGraph、パイプラインの拡張機能を開発し

Related Quesiton

答えて

1

自動パイプラインに変換し、対応するラベルを取得するにはどのようにより良いソリューションを提供する可能性がある場合、私は深く感謝しますよワークフローのような複雑なグラフを作成することができます。データへの任意の変換を定義することができます(例ギャラリーhttps://mcasl.github.io/PipeGraph/を参照)。

+0

恐ろしい!共有ありがとう! – ReneWang

関連する問題