2016-10-25 11 views
1

私はパイプラインを構築しようとカテゴリ変数とカテゴリ変数:ディメンションの不一致

import numpy as np 
import pandas as pd 
import sklearn 
from sklearn.base import BaseEstimator, TransformerMixin 
from sklearn import linear_model 
from sklearn.pipeline import Pipeline 
df = pd.DataFrame({'a':range(6), 'c':['a', 'b', 'c']*2, 'd': ['m', 'f']*3  }) 
X = df[['c', 'd']] 
y = df['a'] 

regressor = linear_model.SGDRegressor() 

は正しいですカテゴリ変数

class Cat(TransformerMixin): 

    def transform(self, X, **transform_params): 
     enc = DictVectorizer(sparse = False) 
     enc_data = enc.fit_transform(X.T.to_dict().values()) 
     return enc_data 

    def fit(self, X, y=None, **fit_params): 
     return self 

パイプライン

pipeline = Pipeline([ 

       ('categorical', Cat()), 
    ('model_fitting', regressor), 
]) 
pipeline.fit(X, y) 

を変換します。しかし、私は新しいデータセットに合わせようとするとエラーになります。たとえば、

contr = pd.DataFrame({'c':['a'], 'd': ['m']}) 
pred = pipeline.predict(contr) 
pred 
and 

ValueError: shapes (1,2) and (5,) not aligned: 2 (dim 1) != 5 (dim 0) 

Cat(TransformerMixin)クラスの問題を参照してください。どのように改善する?

答えて

0

私は以下のようにしました。それは私が機能

class Cat(TransformerMixin): 

def transform(self, X, y=None, **fit_params): 
    enc = DictVectorizer(sparse = False) 
    encc = enc.fit(df[['c', 'd']].T.to_dict().values()) 
    enc_data = encc.transform(X.T.to_dict().values()) 
    return enc_data 

def fit_transform(self, X, y=None, **fit_params): 
    self.fit(X, y, **fit_params) 
    return self.transform(X) 

def fit(self, X, y=None, **fit_params): 
    return self 

そして新しいデータセット

control = pd.DataFrame({'c':['b'], 'd': ['f']}) 
pred = pipeline.predict(control) 
pred 
を変更した

の作品

関連する問題