2015-12-14 16 views
13

Podczas korzystania z XGBoost musimy przekonwertować zmienne kategoryczne na liczbowe.XGBoost Zmienne kategoryczne: Dummification vs encoding

Byłoby jakakolwiek różnica wskaźników wydajności/ocena pomiędzy sposobami:

  1. dummifying zmienne kategoryczne
  2. kodujące zmienne kategoryczne z np (A, b, c) do (1,2,3)

również:

Byłoby jakichkolwiek powodów nie jest dostępny do metody 2, za pomocą na przykład labelencoder?

Odpowiedz

27

xgboost dotyczy tylko kolumn numerycznych.

jeśli masz funkcję [a,b,b,c] który opisuje kategoryczne zmienną (czyli bez relacji numerycznej)

Korzystanie LabelEncoder będzie po prostu mieć to:

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

Xgboostbędzie błędnie interpretują tę funkcję jako o relacji numerycznej! To po prostu mapuje każdy ciąg ('a','b','c') na liczbę całkowitą, nic więcej.

Właściwa droga

Korzystanie OneHotEncoder w końcu dostać się do tego:

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

To jest właściwa reprezentacja z kategorycznym zmiennej dla xgboost lub innego narzędzia uczenia maszynowego.

Pandas get_dummies to ładne narzędzie do tworzenia zmiennych fikcyjnych (, który jest łatwiejszy w użyciu, moim zdaniem).

Sposób nr 2 w powyższej kwestii nie będą reprezentować dane prawidłowo

+3

nie uczyni to z wielu możliwości kategorie pojawiają się ważniejsze niż z mniej? – eleanora

+0

Jak 'Xgboost' wie, jak traktować' array ([1., 0., ...]) 'jako kategoryczny zamiast numerycznego? –

+0

@ThiagoBalbo Po prostu: nie. Po prostu zamieniasz oryginalną zmienną/cechę/kolumnę na 3 zmienne binarne/funkcje/kolumny. – masu