在FeatureUnion中绑定变压器的输出



python和sklearn新手,所以提前道歉。我有两个变压器,我想在' FeatureUnion(最后的建模步骤)中收集结果。这应该是相当简单的,但FeatureUnion是堆叠输出,而不是提供一个nx2数组或数据帧。在下面的示例中,我将生成一些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中的变压器需要返回2维矩阵,但是在您的代码中,通过选择一列,您返回的是1维向量。您可以通过选择X[[self.col_name]]列来解决这个问题。

相关内容

  • 没有找到相关文章

最新更新