处理具有大量水平的因子的R机器学习包

13

我正在尝试做一些需要大量因素型变量(例如单词、描述、时间等非数值型内容)的机器学习。通常我会使用randomForest,但它无法处理具有超过32个级别的因子。

请问是否有其他好用的替代方案?

3个回答

15

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


6

总的来说,我发现在存在大量因子水平的情况下,最好的软件包是使用gbm软件包。

它可以处理高达1024个因子级别。

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


3
理论上,对于具有超过32个类别的分类变量使用randomForest方法是没有问题的 - 尽管在计算上会很昂贵,但使用randomForest方法处理任何数量的类别是可行的。普通的R包randomForest将32设置为给定类别变量的最大类别数,因此禁止用户在任何类别变量的> 32类别上运行randomForest。
线性化变量是一个非常好的建议-我使用了排名类别的方法,然后将它们均匀地分成32个元类。因此,如果实际上有64个不同的类别,则元类1包含类1和2中的所有内容,依此类推。唯一的问题在于找出合理的排名方法-如果你正在处理单词等,知道如何将每个单词针对其他单词进行排名是非常困难的。
解决这个问题的方法是制作n个不同的预测集,其中每个集合包含任何具有超过32个类别的每个类别变量中31个特定子集的所有实例。您可以使用所有集进行预测,然后使用该包提供的变量重要性度量找到使用的类别最具预测性的实现。一旦发现了最具预测性的31个类别,就可以使用所有数据实施新版本的RF,该版本将这些最具预测性的类别指定为1到31,将其余所有内容归入“其他”类别,从而为分类变量提供最大的32个类别,但希望保留大部分预测能力。
祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接