2017-12-24 18 views
1

Ich bin ein Neuling für Machine Learning und versuche, einen Fehler zu beheben, den ich mit der OneHotEncoder-Klasse erhalte. Der Fehler ist: "Erwartetes 2D-Array, stattdessen 1D-Array". Wenn ich also an 1D-Arrays denke, ist es ungefähr so: [1,4,5,6] und ein 2D-Array wäre [[2,3], [3,4], [5,6]], aber ich kann immer noch nicht herausfinden, warum das fehlschlägt. Es versagt in dieser Zeile:Fehler "Erwartetes 2D-Array, stattdessen 1D-Array" Verwenden von OneHotEncoder

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

Hier ist meine ganze Code:

# 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]) 

Ich bin sicher, dass Sie von diesem Code kann sagen, dass ich 2 Spalten haben, die Etiketten waren. Ich habe den Label Encoder verwendet, um diese Spalten in Zahlen zu verwandeln. Ich möchte OneHotEncoder verwenden, um es noch einen Schritt weiter zu nehmen und diese in eine Matrix drehen, um jede Zeile so etwas wie dieses haben würde:

0 1 0 
1 0 1 

Das einzige, was in den Sinn kam, war, wie ich die Etiketten codiert. Ich habe sie nacheinander gemacht, anstatt sie alle gleichzeitig zu machen. Nicht sicher, das ist das Problem.

Ich hatte gehofft, so etwas zu tun:

# 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() 

Nachfolgend finden Sie meine ganze Fehler finden:

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. 

Jede Hilfe in die richtige Richtung wäre toll.

+0

Verwenden 'X zu beheben [:, 0] = onehotencoder1.fit_transform (X [:, 0] .reshape (-1,1)). Toarray () ' –

Antwort

1

Dies ist ein Problem in sklearn OneHotEncoder ausgelöst in https://github.com/scikit-learn/scikit-learn/issues/3662. Die meisten Scikit-Lernschätzer benötigen ein 2D-Array anstelle eines 1D-Arrays.

Die Standardpraxis besteht darin, ein mehrdimensionales Array einzuschließen. Da Sie angegeben haben, welche Spalte in categorical_features = [0] als kategorisch für eineHochcodierung gelten soll, können Sie die nächste Zeile wie folgt umschreiben, um das gesamte Dataset oder einen Teil davon zu übernehmen. Es wird nur die erste Spalte für kategorische Dummy-Transformation berücksichtigt, während noch ein multidimensionales Array zur Verfügung steht.

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

(Ich hoffe, Ihr Dataset nicht mehr kategorisch Werte. Ich werde Ihnen raten, alles zuerst labelencode, onehotencode dann.

0

ich auf eine fix kam durch

Zugabe

X = X.reshape (-1,1)

der Fehler scheint nun verschwunden zu sein, aber nicht sicher, ob dies der richtige Weg ist, dieses

Verwandte Themen