R机器学习包处理具有大量级别的因素

时间:2011-12-21 20:44:12

标签: r machine-learning factors random-forest

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

有人能提出一些好的选择吗?

3 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:5)

一般来说,我发现在有很多因子级别的情况下使用gbm包的最佳包。

它最多可以处理1024个因子级别。

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

答案 2 :(得分:3)

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

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

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

祝你好运!