4

Githubリポジトリにある例を再現できました。しかし、自分のデータで試してみると、ValueError が発生しました。

以下はダミーデータで、実際のデータと同じエラーが発生します。

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 トレースバック (最新の呼び出しが最後) ----> 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 メソッドのアリティ 1 (教師なし変換) --> 455 return self.fit(X, **fit_params).transform(X) 456 else: 457 # アリティ 2 の fit メソッド (教師あり変換)

C:\Users\E245713\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn_pandas\dataframe_mapper.py 列の fit(self, X, y) 95、self.features のトランスフォーマー: 96 (トランスフォーマーでない場合)なし: ---> 97 translators.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 : 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 ("不正な入力形状 {0}".format(形状)) 552 553

ValueError: 不正な入力形状 (8, 2)

誰でも助けることができますか?

ありがとう

4

1 に答える 1

5

実際に複数の入力を受け取る場合にのみ、複数の配列を変換に送信する必要があります (ドキュメントの 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)
于 2016-07-27T21:08:48.963 に答える