在xgboost中处理连续变量和分类变量的最佳方法是什么?

时间:2016-12-11 09:51:51

标签: python pandas machine-learning feature-selection xgboost

我的数据集具有从0到100的年龄的连续变量,并且数据还具有类别变量,例如具有50个类的省份。所以我不知道是否需要将continue变量处理成bin。处理各省的最佳方式是什么? Xgboost无法处理字符串类型的变量。我应该对具有这么多类型的省份使用单热编码吗?

2 个答案:

答案 0 :(得分:0)

IIUC你可以factorize你的类别:

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)

如果你想在分类之前对你的类别进行排序(即'A' - 0,'B' - 1等):

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

或者您可以将类别转换为数字:

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]

答案 1 :(得分:0)

你应该One Hot Encode你的分类值。

XGBoost和GBM通常会遇到高维类别的困难。

在这种情况下,您可以将这些分类值提供给预模型,然后输入xgboost