2017-12-24 17 views
1

私はMachine Learningの初心者で、エラーを処理しようとしていますが、OneHotEncoderクラスを使用しています。エラーは: "期待された2D配列、代わりに1D配列を得ました"。ですから、1D配列を考えると、[1,4,5,6]のようなものですが、2次元配列は[[2,3], [3,4], [5,6]]となりますが、なぜこれが失敗するのか分かりません。これは、この行に失敗しています:ここでエラー "代わりに1次元配列があります" OneHotEncoderの使用

X[:, 0] = onehotencoder1.fit_transform(X[:, 0]).toarray() 

は私の全体のコードです:

# Import Libraries 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

# Import Dataset 
dataset = pd.read_csv('Data2.csv') 
X = dataset.iloc[:, :-1].values 
y = dataset.iloc[:, 5].values 
df_X = pd.DataFrame(X) 
df_y = pd.DataFrame(y) 

# Replace Missing Values 
from sklearn.preprocessing import Imputer 
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0) 
imputer = imputer.fit(X[:, 3:5 ]) 
X[:, 3:5] = imputer.transform(X[:, 3:5]) 


# Encoding Categorical Data "Name" 
from sklearn.preprocessing import LabelEncoder, OneHotEncoder 
labelencoder_x = LabelEncoder() 
X[:, 0] = labelencoder_x.fit_transform(X[:, 0]) 

# Transform into a Matrix 
onehotencoder1 = OneHotEncoder(categorical_features = [0]) 
X[:, 0] = onehotencoder1.fit_transform(X[:, 0]).toarray() 

# Encoding Categorical Data "University" 
from sklearn.preprocessing import LabelEncoder 
labelencoder_x1 = LabelEncoder() 
X[:, 1] = labelencoder_x1.fit_transform(X[:, 1]) 

私はあなたが私はラベルした2列を持っていることを、このコードで伝えることができます確信しています。私はLabel Encoderを使ってこれらの列を数値に変換しました。私はラベルをエンコードする方法だった頭に浮かんだ

0 1 0 
1 0 1 

唯一のもの:各行はこのようなものを持っているでしょうので、私はさらに一歩それを取るとマトリックスにこれらを回すためにOneHotEncoder使用したいと思います。私はそれらを一度に行うのではなく、一つずつやりました。これが問題であるかどうかはわかりません。

私はこのような何かを期待していた:あなた以下

# Encoding Categorical Data "Name" 
from sklearn.preprocessing import LabelEncoder, OneHotEncoder 
labelencoder_x = LabelEncoder() 
X[:, 0] = labelencoder_x.fit_transform(X[:, 0]) 

# Transform into a Matrix 
onehotencoder1 = OneHotEncoder(categorical_features = [0]) 
X[:, 0] = onehotencoder1.fit_transform(X[:, 0]).toarray() 

# Encoding Categorical Data "University" 
from sklearn.preprocessing import LabelEncoder, OneHotEncoder 
labelencoder_x1 = LabelEncoder() 
X[:, 1] = labelencoder_x1.fit_transform(X[:, 1]) 

# Transform into a Matrix 
onehotencoder2 = OneHotEncoder(categorical_features = [1]) 
X[:, 1] = onehotencoder1.fit_transform(X[:, 1]).toarray() 

は私の全体のエラーがあります:

File "/Users/jim/anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py", line 441, in check_array 
    "if it contains a single sample.".format(array)) 

ValueError: Expected 2D array, got 1D array instead: 
array=[ 2. 1. 3. 2. 3. 5. 5. 0. 4. 0.]. 
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample. 

右方向に任意のヘルプは素晴らしいことです。

+0

使っ 'X [:, 0] = onehotencoder1.fit_transform(Xを修正するための正しい方法であるかどうかわから今なくなっているように見えるではなく、 [:、0] .reshape(-1,1))。toarray( ) ' –

答えて

1

これはsklearn OneHotEncoderの問題で、 https://github.com/scikit-learn/scikit-learn/issues/3662で発生しています。ほとんどのscikit学習推定量は、1次元配列ではなく2次元配列を必要とします。

標準的な方法は、多次元配列を含めることです。 onehotencodingのカテゴリとして扱う列をcategorical_features = [0]に指定しているので、次の行を次のように書き換えて、データセット全体またはその一部を取り込むことができます。これは、多次元配列を操作しながら、ダミー変換に分類するための最初の列のみを考慮します。

onehotencoder1 = OneHotEncoder(categorical_features = [0]) 
X = onehotencoder1.fit_transform(X).toarray() 

(私はあなたのデータセットはもうカテゴリ値を持っていません願っています。私は、その後、最初のonehotencodeをすべてをlabelencodeするあなたに助言するだろう。

0

私は

を追加することにより、修正に出くわした

X = X.reshape(-1,1)

エラーがこの

関連する問題