如何在python xgboost中处理大量不同值的数字分类变量?

时间:2017-09-27 10:52:00

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

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

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

我想使用回归模型在用户放置订单后预测订单的ETA(在应用上显示)。我正在考虑使用" restaurant_id"作为我训练模型的一个特征。但现在问题是我在我的平台上列出了100多家餐馆。我不能使用它的数字功能。我必须使用它的分类功能。如何处理这种情况?即如何处理具有如此多不同值的分类特征?

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

提前致谢。

3 个答案:

答案 0 :(得分:0)

Sckit learn有一个很好的课程来处理这类任务 在你的情况下,LabelBinarizer可以为你做一个热门编码! 查找更多here,该答案可以提供帮助

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以使用功能散列(a.k.a哈希技巧)来表示大型分类功能。它与Onehotencoding相同,但形成的稀疏矩阵具有较低的维数。因此它在时间和记忆方面是有效的。