R机器学习软件包处理的因素具有大量的层次

R机器学习软件包处理的因素具有大量的层次,r,machine-learning,factors,random-forest,R,Machine Learning,Factors,Random Forest,我正在尝试做一些机器学习的东西,包括很多因子类型的变量(单词、描述、时间,基本上是非数字的东西)。我通常依赖于randomForest,但它不适用于超过32个级别的因素 有人能推荐一些好的替代方案吗?树方法不起作用,因为可能的拆分数量随着级别的增加呈指数增长。然而,对于单词,这通常是通过为每个单词(描述等)创建指示符变量来解决的——这样拆分可以一次使用一个单词(是/否),而不是选择所有可能的组合。通常,您可以将级别扩展为指标(有些模型隐式地这样做,例如glm)。对于使用其他方法(如SVM等)处理

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


有人能推荐一些好的替代方案吗?

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

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

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

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


祝你好运

一般来说,我发现在有很多因素水平的情况下,最好的方法是使用
gbm
方法

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

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