我正在尝试创建一个函数来根据列值生成多个随机森林模型。让我们假设:
df <- data.frame(Name= c('Aaron','Bob','Nik','Peter','George'),
Work=c('A','B','B','C','A')
,Age = c(45,28,64,27,54)
,cl = c(1,2,2,3,1))
Name Work Age cl
Aaron A 45 1
Bob B 28 2
Nik B 64 2
Peter C 27 3
George A 54 1
因此,我必须基于cl对数据进行子集化,然后根据cl值构建模型,例如:在上面的示例中,我有3个cl值。首先,我将数据划分为三个子集并构建三个不同的模型。
Name Work Age cl Name Work Age cl Name Work Age cl
Aaron A 45 1 Bob B 28 2 Peter C 27 3
George A 54 1 Nik B 64 2
我使用了以下功能来执行此操作:
for(i in unique(uk$v10v11)) {
nam <- paste("df", i, sep = ".")
assign(nam, uk[uk$v10v11==i,])
}
我想完成功能,我可以提供我的df,它应该基于cl构建多个模型。我还想从每个模型的函数本身调整随机森林的参数。请帮忙。
答案 0 :(得分:0)
我建议你有空的时候看this video from hadley wickham。它与你的挑战息息相关。
这似乎也是一个经典的 split-apply-combine 问题,所以我首先考虑的是考虑x-axis: overflow
。这里有一些可能对您有帮助的代码:
tidyverse
基本上创建了一个新列,其中包含适用于该行的随机森林算法,具体取决于library(tidyverse)
library(randomForest)
df2 <- df %>% group_by(cl) %>% mutate(rfcol=list(randomForest(x=.,
formula=.$cl~.$Work+.$Age)))
中的值。您可以通过查看cl
总结一下发生了什么,df2$rfcol[[2]]
函数开始基于group_by
值创建数据帧。嵌套在cl
中的.
函数中的randomForest
是一种引用每个分组数据帧的方式。