Problem mit dem OneHotEncoder für kategoriale Funktionen

11

Ich möchte 3 kategorische Merkmale von 10 Funktionen in meinen Datensätzen kodieren. Ich verwende preprocessing von sklearn.preprocessing , um Folgendes zu tun:

%Vor%

Ich konnte jedoch nicht fortfahren, da ich diesen Fehler erhalte:

%Vor%

Ich bin überrascht, warum es sich über die Saite beschweren soll, da sie es umwandeln soll !! Fehle ich hier etwas?

    
Medo 24.04.2017, 12:56
quelle

5 Antworten

18

Wenn Sie die Dokumente für OneHotEncoder lesen, sehen Sie, dass die Eingabe für fit "Eingabearray vom Typ int" ist. Sie müssen also zwei Schritte für Ihre eine heiß kodierte Daten

machen %Vor%

Ausgabe :

%Vor%     
ncfirth 24.04.2017, 13:16
quelle
4

Sie können beide Umsetzungen anwenden (von Textkategorien auf ganzzahlige Kategorien und dann auf ganzzahlige Kategorien zu One-Hot-Vektoren) in einem Schuss mit der LabelBinarizer-Klasse:

%Vor%

Beachten Sie, dass dies standardmäßig ein dichtes NumPy-Array zurückgibt. Sie können stattdessen eine dünne Matrix erhalten, indem Sie übergeben sparse_output = Wahr für den LabelBinarizer-Konstruktor.

Quelle Hands-On Machine Learning mit Scikit-Learn und TensorFlow

    
Fallou Tall 21.07.2017 23:21
quelle
1

aus der Dokumentation:

%Vor%

Spaltennamen von Pandas Datenrahmen werden nicht funktionieren. Wenn Sie kategorische Merkmale verwenden, verwenden Sie die Spaltennummern 0, 2 und 6:

%Vor%

Es muss auch darauf hingewiesen werden, dass, wenn diese kategorialen Funktionen nicht mit einem Label codiert sind, Sie LabelEncoder für diese Features verwenden müssen, bevor Sie OneHotEncoder

verwenden     
Abhishek Thakur 24.04.2017 13:16
quelle
0

Wenn sich das Dataset im Pandas-Datenrahmen befindet, verwenden Sie

  

pandas.get_dummies

wird einfacher sein.

* von pandas.get_getdummies zu pandas.get_dummies korrigiert

    
HappyCoding 27.11.2017 09:05
quelle
0

@Medo,

Ich habe das gleiche Verhalten und fand es frustrierend. Wie andere darauf hingewiesen haben, benötigt Scikit-Learn all Daten, um numerisch zu sein, bevor es überhaupt die Auswahl der Spalten im Parameter categorical_features in Betracht zieht.

Insbesondere wird die Spaltenauswahl von der Methode _transform_selected() in /sklearn/preprocessing/data.py gehandhabt und die allererste Zeile dieser Methode ist

X = check_array(X, accept_sparse='csc', copy=copy, dtype=FLOAT_DTYPES) .

Diese Überprüfung schlägt fehl, wenn any der Daten im bereitgestellten Datenrahmen X nicht erfolgreich in einen Gleitkommawert konvertiert werden kann.

Ich stimme zu, dass die Dokumentation von sklearn.preprocessing.OneHotEncoder in dieser Hinsicht sehr irreführend ist.

    
Bahman Engheta 15.02.2018 00:03
quelle