FeatureUnion
просто объединит то, что получает от внутренних трансформаторов. Теперь в ваших внутренних преобразователях вы посылаете одинаковые столбцы из каждого. Трансформаторы должны правильно отправлять правильные данные.
Я бы посоветовал вам просто вернуть новые данные из внутренних преобразователей, а затем объединить оставшиеся столбцы снаружи или внутри FeatureUnion
.
Посмотрите на этот пример, если вы еще этого не сделали:
Вы можете сделать это, например:
# This dont do anything, just pass the data as it is
class DataPasser(TransformerMixin):
def fit(self, X, y=None):
return self
def transform(self, X):
return X
# Your transformer
class DummyTransformer(TransformerMixin):
def __init__(self, value=None):
TransformerMixin.__init__(self)
self.value = value
def fit(self, *_):
return self
# Changed this to only return new column after some operation on X
def transform(self, X):
s = np.full(X.shape[0], self.value)
return s.reshape(-1,1)
После этого, далее в вашем коде, измените это:
stages = []
# Append our DataPasser here, so original data is at the beginning
stages.append(('no_change', DataPasser()))
for i in range(2):
transfo = DummyTransformer(value=i+1)
stages.append(('step'+str(i+1),transfo))
pipeunion = FeatureUnion(stages)
Запуск этого нового кода приводит к:
('Given result of the Feature union pipeline: \n',
array([['foo', 'a', '1', '2'],
['bar', 'b', '1', '2'],
['baz', 'c', '1', '2']], dtype='|S21'), '\n')
('Expected result of the Feature Union pipeline: \n',
array([['foo', 'a', '1', '2'],
['bar', 'b', '1', '2'],
['baz', 'c', '1', '2']], dtype='|S21'), '\n')