【问题标题】:How to handle numerical categorical variables haivng large number of different values in python xgboost?python - 如何在python xgboost中处理大量不同值的数字分类变量?
【发布时间】:2018-03-08 19:59:57
【问题描述】:

我正在尝试在 python 中使用 xgboost 解决回归问题。但是我遇到了一个问题。我已经搜索了很多地方,但无法获得任何具体结果。

我有一个食品聚合商的商业模式。我平台上的用户可以从许多不同的餐厅订购。

我想在用户下订单后使用回归模型来预测订单的 ETA(以显示在应用程序上)。我正在考虑在我的训练模型中使用“restaurant_id”作为特征。但现在的问题是我的平台上列出了 100 多家餐厅。而且我不能使用它的数字功能。我必须使用它的分类特征。如何处理这种情况?即如何处理具有这么多不同值的分类特征?

我在 python 中使用 Xgboost。我使用了熊猫的 get_dummies 函数。我不确定是这样做还是遵循其他方法。任何建议都会有所帮助。

提前致谢。

【问题讨论】:

  • 你想用 XGBoost 预测 ETA 吗?
  • @AmeyYadav 我可以使用任何算法,xgboost 不是唯一的。但想法是如何解决这个问题,我被困在了

标签: python scikit-learn regression xgboost one-hot-encoding


【解决方案1】:

Sckit learn 有一个很好的类来处理这些任务 在您的情况下,LabelBinarizer 可以为您进行一种热编码! 查找更多here,该答案会有所帮助

【讨论】:

    【解决方案2】:

    您使用get_dummies() 的方法对我来说听起来不错,因为restaurant_id 是一个分类特征,正如您所提到的。使用基于非参数树的方法,例如随机森林和 xgboost,您甚至可以尝试使用 restaurant_id 作为数字整数特征,通常仍然可以获得良好的性能(请参阅 ogrisel 的答案https://github.com/scikit-learn/scikit-learn/issues/5442)。

    当您有数千个类别时,这特别方便,get_dummies() 会产生一个巨大的矩阵。

    【讨论】:

      【解决方案3】:

      您可以使用特征哈希(也称为哈希技巧)来表示大型分类特征。与Onehotencoding相同,但形成的稀疏矩阵维数较低,因此在时间和内存上都很有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-25
        • 2020-09-06
        • 2015-02-24
        • 2018-03-08
        • 2020-05-22
        • 2012-04-22
        • 2017-04-26
        相关资源
        最近更新 更多