2015-12-14 13 views
13

Bei der Verwendung XGBoost müssen wir kategoriale Variablen in numerische konvertieren.XGBoost Kategoriale Variablen: Dummy vs Codierung

Gäbe es einen Unterschied in der Leistung/Bewertungsmetriken zwischen den Methoden von:

  1. dummifying Ihre kategorischen Variablen
  2. Ihre kategorischen Variablen der Codierung von z.B. (A, b, c) bis (1,2,3)

AUCH:

Würde es irgendwelche Gründe, nicht mit Methode 2 unter Verwendung zum Beispiel labelencoder zu gehen?

Antwort

27

xgboost behandelt nur numerische Spalten.

wenn Sie ein Feature [a,b,b,c] haben, die eine kategorische Variable beschreibt (dh keine numerische Beziehung)

LabelEncoder Verwenden Sie diese einfach haben:

array([0, 1, 1, 2]) 

Xgboostwird falsch interpretieren diese Funktion als eine numerische Beziehung haben! Dies ordnet nur jeden String ('a','b','c') einer ganzen Zahl zu, nichts mehr.

Richtiger Weg

OneHotEncoder Verwenden Sie schließlich dazu bekommen:

array([[ 1., 0., 0.], 
     [ 0., 1., 0.], 
     [ 0., 1., 0.], 
     [ 0., 0., 1.]]) 

Dies ist die richtige Darstellung einer kategorialen Variablen für xgboost oder jede andere Maschine Lernwerkzeug.

Pandas get_dummies ist ein nettes Werkzeug zum Erstellen von Dummy-Variablen (, die meiner Meinung nach einfacher zu bedienen ist).

Methode # 2 in obiger Frage nicht die Daten repräsentieren richtig

+3

Wird dies nicht Features macht mit vielen Kategorien wichtiger erscheinen als diejenigen mit weniger? – eleanora

+0

Wie 'Xgboost'' array ([1., 0., ...]) 'als kategorisch statt numerisch behandeln kann? –

+0

@ThiagoBalbo Einfach ausgedrückt: es tut es nicht. Sie ersetzen nur die ursprüngliche Variable/Feature/Spalte durch 3 binäre Variablen/Features/Spalten. – masu

Verwandte Themen