【发布时间】:2017-02-01 05:33:15
【问题描述】:
python 和 sklearn 的新手,请提前致歉。我有两个变压器,我想将结果收集在一个 `FeatureUnion 中(用于最后的最终建模步骤)。这应该很简单,但 FeatureUnion 是堆叠输出而不是提供 nx2 数组或 DataFrame。在下面的示例中,我将生成一些 10 行乘 2 列的数据。这将生成两个 10 行 x 1 列的特征。我希望最终的功能联合有 10 行和 1 列,但我得到的是 20 行 x 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) 的数组。
快速修复?
【问题讨论】:
标签: python scikit-learn pipeline