XGBoost / CatBoost

时间:2017-09-27 07:49:44

标签: machine-learning random-forest xgboost categorical-data catboost

我对随机森林有疑问。想象一下,我有关于用户与项目交互的数据。项目数量很大,大约10 000.随机森林的输出应该是用户可能与之交互的项目(如推荐系统)。对于任何用户,我想使用描述用户过去与之交互过的项目的功能。但是,将分类产品功能映射为单热编码似乎非常缺乏内存效率,因为用户最多只能与几百个项目进行交互,有时甚至只有5个。

当其中一个输入要素是具有~10 000个可能值的分类变量且输出是具有~10 000个可能值的分类变量时,您将如何构建随机森林?我应该将CatBoost与功能一起使用吗?或者我应该使用单热编码,如果是这样,你认为XGBoost或CatBoost会做得更好吗?

3 个答案:

答案 0 :(得分:1)

XGBoost不直接支持分类功能,您需要进行预处理才能将其与catfeatures一起使用。例如,您可以执行单热编码。如果您的cat功能有一些频繁的值,那么单热编码通常很有效。

CatBoost确实具有分类功能支持 - 单热编码和计算分类功能的不同统计信息。要使用单热编码,您需要使用one_hot_max_size参数启用它,默认情况下会计算统计信息。统计数据通常对具有多个值的分类特征更有效。

答案 1 :(得分:1)

您还可以尝试实体嵌入,将数百个布尔特征减少为小维度的矢量。

类似于分类功能的单词嵌入。实际上,您可以定义将离散特征空间嵌入到低维向量空间中。它可以增强您的结果并节省内存。缺点是你需要训练神经网络模型来预先定义嵌入。

查看https://github.com/wch/r-source/blob/ec2e89f38a208ab02449b706e13f278409eff16c/src/main/subset.c#L169了解详情。

答案 2 :(得分:0)

假设您拥有足够的域专业知识,则可以从现有列创建新的分类列。 例如: - 如果列的值低于值

A,B,C,D,E,F,G,H

如果你知道A,B,C是相似的D,E,F是相似的,G,H是相似的 你的新专栏将是

Z,Z,Z,Y,Y,Y,X,X.

在随机林模型中,您应该删除上一列,并且只包含此新列。通过转换这样的功能,您可以放松模式的可解释性。