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)的数组。

快速解决?

最佳答案

FeatureUnion中的转换器需要返回二维矩阵,但是在代码中通过选择列,您将返回一维向量。您可以通过选择X[[self.col_name]]列来解决此问题。

关于python - 绑定(bind)FeatureUnion中的变压器输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39659370/

10-08 21:54