12

我正在尝试做一些涉及大量因子类型变量(单词、描述、时间,基本上是非数字的东西)的机器学习。我通常依赖randomForest但它不适用于具有> 32个级别的因素。

任何人都可以提出一些好的选择吗?

4

3 回答 3

15

树方法不起作用,因为可能的拆分数量随着级别的数量呈指数增长。然而,对于单词,这通常通过为每个单词(描述等)创建指示变量来解决 - 这样拆分可以一次使用一个单词(是/否),而不是选择所有可能的组合。通常,您始终可以将级别扩展为指标(有些模型会隐式执行此操作,例如 glm)。在 ML 中使用其他方法(例如 SVM 等)处理文本也是如此。所以答案可能是您需要考虑输入数据结构,而不是方法。或者,如果您在级别上有某种顺序,则可以对其进行线性化(因此只有c-1 个拆分)。

于 2011-12-22T02:10:13.950 回答
6

一般来说,对于有很多因素水平的情况,我发现的最好的包是使用这个gbm包。

它可以处理多达 1024 个因子水平。

如果有超过 1024 个级别,我通常会通过保留 1023 个最常出现的因子级别来更改数据,然后将其余级别编码为一个级别。

于 2013-03-10T14:37:10.637 回答
3

在具有超过 32 个类的类变量上使用 randomForest 方法在理论上没有任何问题——它的计算成本很高,但使用 randomForest 方法处理任意数量的类并非不可能。普通的 R 包 randomForest 将 32 设置为给定类变量的最大类数,因此禁止用户在任何类变量的任何类变量上运行 randomForest。

对变量进行线性化是一个非常好的建议——我使用了对类进行排名的方法,然后将它们平均分成 32 个元类。因此,如果实际上有 64 个不同的类,则元类 1 由 1 类和 2 类中的所有事物组成,等等。这里唯一的问题是找出一种合理的排名方式——如果你正在使用,比如说,单词很难知道每个单词应该如何与其他单词进行排名。

解决此问题的一种方法是制作 n 个不同的预测集,其中每个集包含所有实例,其中每个类变量中的 31 个类的任何特定子集具有超过 32 个类。您可以使用所有集合进行预测,然后使用包附带的变量重要性度量找到使用的类最具预测性的实现。一旦你发现了 31 个最具预测性的类别,使用将这些最具预测性的类别指定为 1 到 31 的所有数据来实施新版本的 RF,并将其他所有内容归入“其他”类别,从而为您提供最多 32 个类别分类变量,但希望保留大部分预测能力。

祝你好运!

于 2013-01-19T23:39:25.610 回答