2016-12-11 1 views
0

Mon ensemble de données a continue variable comme l'âge de 0 à 100, et les données ont aussi une variable catégorielle comme les provinces qui a 50 classes. Donc, je ne sais pas si j'ai besoin de traiter la variable continue dans les bacs. Et quelle est la meilleure façon de traiter les provinces? Xgboost ne peut pas traiter le type de chaîne de la variable. Dois-je utiliser un codage à chaud unique pour les provinces avec autant de types?Quelles sont les meilleures façons de traiter la variable continue et la variable catégorielle dans xgboost?

Répondre

0

IIUC vous pouvez factorize vos catégories:

In [1]: prv = pd.Series(['C','A','C','B','A'], dtype='category') 

In [2]: prv 
Out[2]: 
0 C 
1 A 
2 C 
3 B 
4 A 
dtype: category 
Categories (3, object): [A, B, C] 

In [3]: pd.factorize(prv)[0].astype(np.uint8) 
Out[3]: array([0, 1, 0, 2, 1], dtype=uint8) 

si vous voulez trier vos catégories avant de les factoriser (ie 'A' - 0, 'B' - 1, etc.):

In [4]: pd.factorize(prv, sort=True)[0].astype(np.uint8) 
Out[4]: array([2, 0, 2, 1, 0], dtype=uint8) 

Sinon, vous pouvez convertir les catégories de numéros:

In [12]: prv.cat.rename_categories(range(prv.nunique())) 
Out[12]: 
0 2 
1 0 
2 2 
3 1 
4 0 
dtype: category 
Categories (3, int64): [0, 1, 2] 
0

vous devez One Hot Encode y nos valeurs catégoriques.

XGBoost, et GBM en général, aura des difficultés avec les catégories de haute dimension.

Dans ce cas, vous pouvez appliquer ces valeurs catégorielles à un pré-modèle, puis xgboost