2016-04-16 2 views
0

Ich habe Probleme beim Codieren nur kategorische Spalten mit OneHotEncoder und kontinuierliche Spalten verlassen. Der Encoder codiert alle Spalten unabhängig davon, was ich in den categorical_features angegeben habe. Zum Beispiel:So verwenden Sie OneHotEncoder categorical_features

enc = preprocessing.OneHotEncoder() 
enc.fit([[0, 40, 3], [1, 50, 0], [0, 45, 1], [1, 30, 2]]) 
OneHotEncoder(categorical_features=[0,2], 
    handle_unknown='error', n_values='auto', sparse=True) 
print enc.n_values_ 
print enc.feature_indices_ 
enc.transform([[0, 45, 3]]).toarray() 

Ich möchte nur Spalte 1 und 3 kodieren, die mittlere Spalte verlassen (Wert 40, 50, 45, 30) als kontinuierliche Werte. So definiere ich categorical_features = [0,2], aber egal was ich tue, die Ausgabe dieses Codes ist nach wie vor:

[ 2 51 4] 
[ 0 2 53 57] 
Out[129]: 
array([[ 1., 0., 0., 0., 1., 0., 0., 0., 0., 1.]]) 

Antwort

1

Warum nennst du OneHotEncoder Konstruktor twise? enc wurde standardmäßig von Konstruktor erstellt, so dass Sie für enccategorical_features='all' (alle Feature sind kategorisch) haben. Wie ich verstehe Sie somthing wie diese brauchen:

enc = OneHotEncoder(categorical_features=[0,2], 
    handle_unknown='error', n_values='auto', sparse=True) 
enc.fit([[0, 40, 3], [1, 50, 0], [0, 45, 1], [1, 30, 2]]) 
print(enc.n_values_) 
print(enc.feature_indices_) 
enc.transform([[0, 45, 3]]).toarray() 

und werden Sie

[2 4] 
[0 2 6] 
Out[23]: array([[ 1., 0., 0., 0., 0., 1., 45.]]) 
+0

In der letzten Zeile des ersten Codeblock haben, wo Sie die 0, 45 und 3 aus zu bekommen? – HMLDude

+0

@HMLDude, * [[0, 45, 3]] * ist eine Liste, die wir kodieren wollen. Andererseits könnte es zum Beispiel * [[1, 30, 2]] * sein. – MrFroll