python和sklearn的新手提前道歉。我有两个变换器,我想将结果收集到一个`FeatureUnion(最后的最后建模步骤)。这应该非常简单,但FeatureUnion正在堆叠输出而不是提供nx2数组或DataFrame。在下面的示例中,我将生成一些10行乘2列的数据。然后,这将生成两个10行乘1列的功能。我希望最终的功能联合有10行1列,但我得到的是20行1列。
我将尝试使用下面的示例进行演示:
一些进口
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]
使用变压器两次的管道(在我的实际情况下,我有两个不同的变压器,但这会重现问题)
pipe = pipeline.FeatureUnion([
('select_a', Trans('a')),
('select_b', Trans('b'))
])
现在我使用管道,但它返回一个长度为两倍的数组
pipe.fit_transform(df).shape
(20,)
但是我想要一个尺寸为(10,2)的数组。
快速修复?
答案 0 :(得分:2)
FeatureUnion
中的变换器需要返回二维矩阵,但是在代码中通过选择一列,您将返回一维向量。您可以通过选择X[[self.col_name]]
列来解决此问题。