2017-12-24 18 views
1

저는 Machine Learning의 초보자이며 OneHotEncoder 클래스를 사용하여 오류가 발생했습니다. 오류 : "예상 된 2D 배열 대신 1D 배열이 있습니다." 그래서 1D 배열을 생각하면 다음과 같습니다 : [1,4,5,6] 그리고 2D 배열은 [[2,3], [3,4], [5,6]]이 될 것입니다. 그러나 왜 아직도 실패하고 있는지 알 수 없습니다. 그것은이 라인에 실패하는 것 : 오류 "2D 배열이 필요합니다. 대신 1D 배열이 있습니다."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.reshape는 (-1,1)

오류는 이제 사라,하지만 확실하지 않은 것으로 나타납니다 [:, 0]. 추락 (-1,1)). toarray ()' –

답변

1

sklearn OneHotEncoder의 문제는 https://github.com/scikit-learn/scikit-learn/issues/3662에서 제기되었습니다. 대부분의 scikit 학습자는 1D 배열보다는 2D 배열이 필요합니다.

표준 방법은 다차원 배열을 포함하는 것입니다. onehotencoding에 대해 categorical로 고려할 열을 categorical_features = [0]에 지정 했으므로 다음 행을 다음과 같이 다시 작성하여 전체 데이터 집합이나 그 일부를 취할 수 있습니다. 다차원 배열이 여전히 작동하는 동안 단층 변환에 대한 첫 번째 열만 고려합니다.

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

(나는 당신의 데이터 세트가 더 이상 범주 값이없는 바란다. 그때 처음 onehotencode 모든 것을 labelencode하기 위해 조언을 것입니다.

0

내가

을 추가하여 수정을 가로 질러왔다

X = 이 (X를이