3

我有一个关于随机森林的问题。想象一下,我有关于用户与项目交互的数据。项目的数量很大,大约 10 000 个。我的随机森林输出应该是用户可能与之交互的项目(如推荐系统)。对于任何用户,我都想使用一个功能来描述用户过去与之交互的项目。但是,将分类产品特征映射为 one-hot 编码似乎非常低效,因为用户最多与不超过几百个项目交互,有时只有 5 个。

当输入特征之一是具有约 10 000 个可能值的分类变量并且输出是具有约 10 000 个可能值的分类变量时,您将如何构建随机森林?我应该使用具有分类功能的 CatBoost 吗?或者我应该使用 one-hot 编码,如果是这样,你认为 XGBoost 或 CatBoost 做得更好吗?

4

3 回答 3

3

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

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

查看这篇文章了解更多信息。

于 2018-04-26T11:56:19.247 回答
1

XGBoost 不直接支持分类特征,您需要进行预处理才能将其与 catfeatures 一起使用。例如,您可以进行 one-hot 编码。如果你的 cat 特征有一些频繁的值,one-hot 编码通常效果很好。

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

于 2017-10-06T13:56:25.560 回答
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.

在您的随机森林模型中,您应该删除以前的列并且只包含这个新列。通过像这样转换您的功能,您将失去对模式的可解释性。

于 2017-09-27T12:35:17.277 回答