2016-07-27 49 views
1

我能夠複製Github回購中給出的示例。但是,當我在我自己的數據上嘗試時,我得到了ValueError。Sklearn-Pandas DataFrameMapper:mapper.fit_transform給出ValueError:錯誤的輸入形狀(8,2)

下面是一個虛擬數據,它給出了與我的真實數據相同的錯誤。

import pandas as pd 
import numpy as np 
from sklearn_pandas import DataFrameMapper 
from sklearn.preprocessing import LabelEncoder, StandardScaler, MinMaxScaler 

data = pd.DataFrame({'pet':['cat', 'dog', 'dog', 'fish', 'cat', 'dog','cat','fish'], 'children': [4., 6, 3, 3, 2, 3, 5, 4], 'salary': [90, 24, 44, 27, 32, 59, 36, 27], 'feat4': ['linear', 'circle', 'linear', 'linear', 'linear', 'circle', 'circle', 'linear']}) 

mapper = DataFrameMapper([ 
    (['pet', 'feat4'], LabelEncoder()), 
    (['children', 'salary'], [StandardScaler(), 
           MinMaxScaler()]) 
]) 

np.round(mapper.fit_transform(data.copy()),2) 

下面是錯誤


ValueError Traceback (most recent call last) in() ----> 1 np.round(mapper.fit_transform(data.copy()),2)

C:\Users\E245713\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\base.py in fit_transform(self, X, y, **fit_params) 453 if y is None: 454 # fit method of arity 1 (unsupervised transformation) --> 455 return self.fit(X, **fit_params).transform(X) 456 else: 457 # fit method of arity 2 (supervised transformation)

C:\Users\E245713\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn_pandas\dataframe_mapper.py in fit(self, X, y) 95 for columns, transformers in self.features: 96 if transformers is not None: ---> 97 transformers.fit(self._get_col_subset(X, columns)) 98 return self 99

C:\Users\E245713\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py in fit(self, y) 106 self : returns an instance of self. 107 """ --> 108 y = column_or_1d(y, warn=True) 109 _check_numpy_unicode_bug(y) 110 self.classes_ = np.unique(y)

C:\Users\E245713\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\utils\validation.py in column_or_1d(y, warn) 549 return np.ravel(y) 550 --> 551 raise ValueError("bad input shape {0}".format(shape)) 552 553

ValueError: bad input shape (8, 2)

誰能幫助?

感謝

回答

3

您應該只提交多陣列變換,如果它確實需要多個輸入(例如sklearn.decomposition.PCA(1)的文檔中)。在你的情況下,錯誤最終來自該行:

(['pet', 'feat4'], LabelEncoder()), 

即使這不起作用:

(['pet', 'feat4'], [LabelEncoder(), LabelEncoder()]), 

你,而不是必須做這樣的事情:

mapper_good = DataFrameMapper([ 
(['pet'], LabelEncoder()), 
(['feat4'], LabelEncoder()), 
(['children'], StandardScaler()), 
(['salary'], MinMaxScaler()) 
]) 

np.round(mapper_good.fit_transform(data.copy()),2) 
+0

感謝@jeff凱里!我懷疑我的錯誤來自該行,但無法弄清楚原因。我很專注於文檔的一部分,說你可以做多列w/1變壓器。我想這取決於變壓器..好知道!至於(['children','salary'],[StandardScaler(),MinMaxScaler()])實際上適用於同一元組中的多個列和多個變換器(對於這些變換器至少...)。再次感謝! – wi3o

+1

此外,來自github的master分支具有將默認轉換器應用於未在轉換器中明確列出的列的功能,以防萬一這對您有用:https://github.com/paulgb/sklearn-pandas#applying-a-默認變壓器 – dukebody

+0

@dukebody謝謝! – wi3o

相關問題