具有所有自变量作为分类的随机森林回归器

Posted

技术标签:

【中文标题】具有所有自变量作为分类的随机森林回归器【英文标题】:randomforest Regressor with all independent variable as categorical 【发布时间】:2020-07-15 13:44:36 【问题描述】:

我在构建模型的过程中陷入困境。基本上我有 10 个参数,所有这些参数都是分类变量,甚至类别都有大量唯一值(一个类别有 300 000 条记录的 1335 个唯一值),并且要预测的 y 值是天数(数值)。我正在使用随机森林回归器并获得大约 55-60% 的准确度。我不确定这是否是最大限制,或者我真的需要更改算法本身。我对任何类型的解决方案都很灵活。

【问题讨论】:

【参考方案1】:

一个分类维度有多达 1335 个类别可能会导致随机森林回归器(或分类器)有些头疼,具体取决于内部处理分类维度的方式,而且事情还取决于类别的分布频率。您使用什么库进行随机森林回归?

您是否尝试过将分类维度转换为唯一的整数 ID 并将这种表示形式解释为实数维度?我的经验是,这可以提高许多类别维度的可变重要性。 (有时类别的固有/初始排序可以提供有用的分组/分区信息)。 您甚至可以将您的维度打乱几次,并将其用作输入维度。我将尝试用一个例子来解释:

您有一个类别维度 x1,类别为 [c11,c12,...,c1n] 我们很容易将这些类别映射到数值,如果 x1 的类别是 c11,则其值为 1,如果是类别,则值为 2,或者类别 c1i 的值为 i 等。 使用这个新的 non-categorical 维度作为训练的输入维度(稍后您必须相应地更改回归量的输入)。 你可以走得更远。将 x1 类别的顺序(随机)打乱,以便获得随机顺序,例如 [c13,c19,c1n,c1i,...,c12]。执行与上述相同的操作,您将获得另一个新的 non-categorical 输入维度(考虑到您必须记住洗牌顺序以便稍后进行回归)。 我很好奇添加这样的几个维度(介于 1 到 100 之间,或您选择的任何数字)是否可以提高您的性能。 请查看不同数量的此类维度的性能如何变化。 (但请注意,更多这样的维度会花费您在回归时的预处理时间)

下面代码块中的语句需要一次组合多个分类维度。考虑它只是为了获得灵感。

Another idea would be to check if some form of linear classifier with the hot-encodings for each individual category for multiple categorical dimensions might be able improve things (This can help you find useful orderings more quickly than the approach above).

【讨论】:

感谢您的回复,我正在使用 sklean 的 ensemble randomforestregressor,所有值都在 ids 中(例如:1,2,134 等),如果我理解正确,您建议我执行 one-hot 编码,但我担心即使考虑到其他也是分类的参数,数据集的水平长度也会太大, 考虑到 sklearn 的文档 ([RFC Doc)](example),它似乎是 RF 算法的标准实现,没有任何调整,所以 one-hot 编码应该在随机森林训练中完成反正。我看到解释比我想象的要复杂。我将编辑并在我之前的答案中添加一些示例以突出显示这些想法。【参考方案2】:

我确信您需要对您的数据进行更多处理。 在一个变量上拥有 1335 个唯一值是一件很奇怪的事情。 请,如果数据是公开的,请与我分享,我想看看。

【讨论】:

以上是关于具有所有自变量作为分类的随机森林回归器的主要内容,如果未能解决你的问题,请参考以下文章

随机森林回归器的特征选择

随机森林原理

随机森林与Adaboost

MATLAB-随机森林实现数据回归分析预测

随机森林

sklearn 随机森林分类器可以处理分类变量吗?