基于R中的列值创建多个模型的函数

时间:2017-07-17 15:40:57

标签: r machine-learning random-forest data-science

我正在尝试创建一个函数来根据列值生成多个随机森林模型。让我们假设:

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构建多个模型。我还想从每个模型的函数本身调整随机森林的参数。请帮忙。

1 个答案:

答案 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是一种引用每个分组数据帧的方式。

希望这会有所帮助。但如上所述,如果你有时间,请尝试观看来自hadley wickham的视频。它将真正解释如何详细考虑这些类型的问题。