Wie behandeln kategorischen Variablen in sklearn GradientBoostingClassifier?
Ich bin versucht zu trainieren, Modelle mit GradientBoostingClassifier mit kategorischen Variablen.
Folgende ist eine primitive code-Beispiel, nur für den Versuch, input kategorischen Variablen in GradientBoostingClassifier
.
from sklearn import datasets
from sklearn.ensemble import GradientBoostingClassifier
import pandas
iris = datasets.load_iris()
# Use only data for 2 classes.
X = iris.data[(iris.target==0) | (iris.target==1)]
Y = iris.target[(iris.target==0) | (iris.target==1)]
# Class 0 has indices 0-49. Class 1 has indices 50-99.
# Divide data into 80% training, 20% testing.
train_indices = list(range(40)) + list(range(50,90))
test_indices = list(range(40,50)) + list(range(90,100))
X_train = X[train_indices]
X_test = X[test_indices]
y_train = Y[train_indices]
y_test = Y[test_indices]
X_train = pandas.DataFrame(X_train)
# Insert fake categorical variable.
# Just for testing in GradientBoostingClassifier.
X_train[0] = ['a']*40 + ['b']*40
# Model.
clf = GradientBoostingClassifier(learning_rate=0.01,max_depth=8,n_estimators=50).fit(X_train, y_train)
Wird die folgende Fehlermeldung angezeigt:
ValueError: could not convert string to float: 'b'
Von dem, was ich sammeln, es scheint, dass One Hot Encoding auf kategoriale Variablen erforderlich ist, bevor GradientBoostingClassifier
kann das Modell erstellt wird.
Kann GradientBoostingClassifier
erstellen von Modellen mit kategorialen Variablen, ohne dass man eine hot-Codierung?
R gbm-Paket ist in der Lage Umgang mit den oben aufgeführten Beispieldaten. Ich bin auf der Suche nach einer Python-Bibliothek, mit gleichwertiger Leistungsfähigkeit.
- Sie tun müssen, verwenden Sie eine OneHotEncoder. Dann sollte dies kein problem sein. Auch, nicht den pandas DataFrames in scikit-learn-Schätzer verwenden, sollten Sie das numpy-arrays (durch Aufruf von np.array(dataframe) oder dataframe.Werte).
- Es ist work in progress, um dies zu ermöglichen.
- Gleiche Frage wie diese eine.
Du musst angemeldet sein, um einen Kommentar abzugeben.
pandas.get_dummies oder statsmodels.tools.tools.kategorische kann verwendet werden, konvertieren von kategorialen Variablen eine dummy-matrix. Wir können dann wechseln Sie die dummy-matrix zurück auf die Trainingsdaten.
Unten ist der Beispiel code aus der Frage mit dem oben beschriebenen Verfahren durchgeführt.
Dank an Andreas Müller für die anweisen, dass die pandas Dataframe sollte nicht verwendet werden, für die scikit-learn Schätzer.
Sicher, dass es damit umgehen kann, Sie müssen nur für die Kodierung der kategorialen Variablen in einem separaten Schritt in der pipeline. Sklearn ist durchaus in der Lage Umgang mit kategorialen Variablen sowie R-oder jede andere-ML-Packung. Das R-Paket ist immer noch (vermutlich) zu tun, one-hot-Codierung hinter den kulissen, es funktioniert einfach nicht trennen die Anliegen der Codierung und Einbau in diesem Fall (wie es wohl auch soll).