Ich möchte 3 kategorische Merkmale von 10 Funktionen in meinen Datensätzen kodieren. Ich verwende preprocessing
von sklearn.preprocessing , um Folgendes zu tun:
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?
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
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
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
@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.
Tags und Links scikit-learn feature-extraction categorical-data