基于 R 中的列值创建多个模型的函数
A function to create multiple models based on column value in R
我正在尝试创建一个函数来根据列值生成多个随机森林模型。假设我们:
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 values.So,首先我将数据分为三个子集并构建三个不同的子集模型。
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 构建多个模型。我还想从每个模型的函数本身调整随机森林的参数。请帮忙。
我建议您在有空的时候观看this video from hadley wickham。它与您的挑战密切相关。
这似乎也是一个经典的 split-apply-combine 问题,所以我的第一个想法是考虑 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
值创建数据帧。嵌套在 mutate
中的 randomForest
函数中的 .
是引用每个分组数据帧的一种方式。
希望这对您有所帮助。但如前所述,如果有时间,请尝试观看 hadley wickham 的视频。它将真正详细地解释如何思考这些类型的问题。
我正在尝试创建一个函数来根据列值生成多个随机森林模型。假设我们:
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 values.So,首先我将数据分为三个子集并构建三个不同的子集模型。
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 构建多个模型。我还想从每个模型的函数本身调整随机森林的参数。请帮忙。
我建议您在有空的时候观看this video from hadley wickham。它与您的挑战密切相关。
这似乎也是一个经典的 split-apply-combine 问题,所以我的第一个想法是考虑 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
值创建数据帧。嵌套在 mutate
中的 randomForest
函数中的 .
是引用每个分组数据帧的一种方式。
希望这对您有所帮助。但如前所述,如果有时间,请尝试观看 hadley wickham 的视频。它将真正详细地解释如何思考这些类型的问题。