当前位置:  开发笔记 > 编程语言 > 正文

XGBoost分类变量:Dummification与编码

如何解决《XGBoost分类变量:Dummification与编码》经验,为你挑选了1个好方法。

使用时XGBoost我们需要将分类变量转换为数字.

以下方法之间的绩效/评估指标是否会有任何差异:

    使您的分类变量变得模糊

    将您的分类变量编码为例如(a,b,c)到(1,2,3)

也:

是否有任何理由不使用例如方法2 labelencoder



1> T. Scharf..:

xgboost 仅处理数字列.

如果你有一个[a,b,b,c]描述分类变量的功能(即没有数字关系)

使用LabelEncoder你只需要:

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

Xgboost 将错误地将此功能解释为具有数字关系! 这只是将每个字符串映射('a','b','c')到一个整数,仅此而已.

合适的方式

使用OneHotEncoder,您最终会得到:

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

这是适用xgboost任何其他机器学习工具的分类变量的正确表示.

Pandas get_dummies是一个很好的工具,用于创建虚拟变量(在我看来,它更容易使用).

上述问题中的方法#2不能正确表示数据


假设我们正在谈论将Xgboost用于GBDT而不是线性模型,这个答案根本就不是这样.使用整数作为xgboost编码分类变量,有时(YMMV)out执行一个热编码.
对于声称基于树的分割算法可以梳理出编码为数字的分类的人们,他们需要理解xgboost使用基于梯度的分割标准,因此数字关系被保留,与基于熵不同,其中数字编码可以更容易地成功.这可以通过玩具数据集凭经验验证.如果你有大量的类别,当然一个热门是一个糟糕的策略.
这会使许多类别的功能看起来比那些功能较少的功能更重要吗?
*“ ...或任何其他机器学习工具” *我不了解xgboost,但总的来说这根本不正确,许多机器学习工具直接处理分类变量,使用OHE或伪变量会严重降低性能:https ://roamanalytics.com/2016/10/28/are-categorical-variables-getting-lost-in-your-random-forests/。此外,还有许多其他用于分类变量的编码方案,最佳编码将取决于您的模型以及数据。
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有