あらかじめPythonとSklearnで謝っています。私は2つの変圧器を持っており、結果を「FeatureUnion」(最終的なモデリング・ステップの最後)に集めたいと考えています。これは非常に簡単ですが、FeatureUnionはnx2配列またはDataFrameを提供するのではなく、出力を積み重ねています。以下の例では、10行×2列のデータを生成します。これにより、10行1列の2つの機能が生成されます。私は最終的なフィーチャユニオンに10行1列を持たせたいと思いますが、私が得るのは20行1列です。FeatureUnionでトランスの出力をバインドする
私は以下の私の例で証明しようとします:一部の輸入
import numpy as np
import pandas as pd
from sklearn import pipeline
from sklearn.base import TransformerMixin
いくつかのランダムなデータ
df = pd.DataFrame(np.random.rand(10, 2), columns=['a', 'b'])
列を選択するカスタムトランスを
class Trans(TransformerMixin):
def __init__(self, col_name):
self.col_name = col_name
def fit(self, X):
return self
def transform(self, X):
return X[self.col_name]
回のトランスを使用してパイプライン(私の実際のケースで私は2つの異なるトランスを持っていますが、これは問題を再現)
pipe = pipeline.FeatureUnion([
('select_a', Trans('a')),
('select_b', Trans('b'))
])
今私はパイプラインを使用しますが、それは二倍の長さ
pipe.fit_transform(df).shape
(20,)
の配列を返します。
しかし、寸法(10,2)の配列が必要です。
クイックフィックス?