R中的RandomForest错误,因为;“类别太多”;

R中的RandomForest错误,因为;“类别太多”;,r,random-forest,R,Random Forest,我尝试在R中训练RF模型,但当我尝试定义模型时: rf <- randomForest(labs ~ .,data=as.matrix(dd.train)) 知道会是什么吗 不,在你说“你有一个超过53个类别的分类变量”之前。不,除了labs之外,所有变量都是数字 Tim Biegeleisen:阅读我问题的最后一行,你会发现为什么它与你链接的不一样 编辑以解决OP的后续问题 我相信在这种情况下使用as.matrix会隐式地产生一些因素。对于此软件包也不需要。您可以将其保留为数据帧,但需

我尝试在R中训练RF模型,但当我尝试定义模型时:

rf <- randomForest(labs ~ .,data=as.matrix(dd.train))
知道会是什么吗

不,在你说“你有一个超过53个类别的分类变量”之前。不,除了
labs
之外,所有变量都是数字


Tim Biegeleisen:阅读我问题的最后一行,你会发现为什么它与你链接的不一样

编辑以解决OP的后续问题

我相信在这种情况下使用
as.matrix
会隐式地产生一些因素。对于此软件包也不需要。您可以将其保留为数据帧,但需要确保通过使用
droplevels
(或类似工具)删除任何未使用的因子级别。数据集中可能存在未使用因子的原因有很多,但一个常见的原因是观测值丢失

下面是一个复制错误的快速示例:

library('randomForest')

#making a toy data frame
x <- data.frame('one' = c(1,1,1,1,1,seq(50) ),
       'two' = c(seq(54),NA),
       'three' = seq(55),
       'four' = seq(55) )

x$one <- as.factor(x$one)

x <- na.omit(x) #getting rid of an NA. Note this removes the whole row.

randomForest(one ~., data = as.matrix(x)) #your first error
randomForest(one ~., data = x) #your second error

x <- droplevels(x)

randomForest(one ~., data = x) #OK
库(“随机林”)
#制作玩具数据框

如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,那么就更容易帮助您。听起来您的数据可能没有正确编码。请使用
forcats::fct\u lump()
减少factors@jyjek因子变量只有26个类别。@MrFlick数据已正确编码;256列
数值
矩阵列和一列
分类
(26级)列(本例中为公式中的实验室)。对于任何类型的随机错误类分配,都要进行三重检查。我不能——也不会——提供一个“工作示例”,因为我正在使用一个非常大的数据输入(顺便说一句,这是保密的),问题不是“我在a,我不知道如何到达B”。我怀疑问题可能在于公式中有太多的数值列,并且它错误地将其输出为太多的类别错误。它在randomForest中给出了此错误
错误。默认值(m,y,…):y中不能有空类。
已经尝试过了,也不起作用。。但我刚刚意识到,当我划分成训练/测试子集时,在训练数据中,公式中没有y变量的每一类的情况,你认为这可能是问题吗?我发现了问题!!在factor列中,类别名称中有时会出现空白,而这些名称不知为何会出现空白;变成了空值(不知道为什么,我从labs列的
表中找到了答案)。我用一个
gsub(“,”,labs)
修复了它。我将把你的答案标记为接受的你,因为它可以很好地指导其他人处理rf中的相同问题。
library('randomForest')

#making a toy data frame
x <- data.frame('one' = c(1,1,1,1,1,seq(50) ),
       'two' = c(seq(54),NA),
       'three' = seq(55),
       'four' = seq(55) )

x$one <- as.factor(x$one)

x <- na.omit(x) #getting rid of an NA. Note this removes the whole row.

randomForest(one ~., data = as.matrix(x)) #your first error
randomForest(one ~., data = x) #your second error

x <- droplevels(x)

randomForest(one ~., data = x) #OK