2016-09-23 58 views
2

新的python和sklearn提前道歉。我有兩臺變壓器,我想將結果收集在一個FeatureUnion中(最後的最終建模步驟)。這應該很簡單,但FeatureUnion堆疊輸出而不是提供nx2數組或DataFrame。在下面的例子中,我將生成一些10行2列的數據。這將生成10行1列的兩個特徵。我希望最終的功能聯盟有10行和1列,但我得到的是20行1列。FeatureUnion變壓器的綁定輸出

我會嘗試用我下面的例子來說明:

部分進口

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)的數組。

快速修復?

回答

2

FeatureUnion中的變換器需要返回二維矩陣,但是在您的代碼中,通過選擇一列,您將返回一維向量。您可以通過選擇X[[self.col_name]]的列來解決此問題。