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