我试图运行一个循环,生成5个随机样本,然后是5个不同的RandomForest模型。
我在第二部分遇到麻烦(运行模型);我无法在以下代码中处理因变量(nam$eR
):
numS <- 5 # number of samples
dataS <- ERC3
rfModels <- list()
for(j in 1:numS) {
print(j)
set.seed(j+1)
nam <- paste("RFs", j, sep = "")
assign(nam, dataS[sample(nrow(dataS),100000),]) # Random sample of 100,000 rows.
namM <- paste("RFfit", j, sep = "")
assign(namM, randomForest(as.factor(nam$eR)~., data=nam[,-231], importance = TRUE))
rfModels[[j]] <- namM
}
提前谢谢!
答案 0 :(得分:3)
我不确定这是否适用于您的情况,因为我没有样本数据,但如果您要使用user_id
数据集执行我正在考虑的事情,那么会是这样的......首先,最好有一个数据框列表来容纳你运行模型的数据。这可以按如下方式完成:
$post = new Post([
'body' => $request->input('body'),
'user_id' => $your_use_id
]);
(根据评论,这样做的一个更明智的方法是使用
mtcars
)
library(dplyr)
library(randomForest)
dfs <- list() #home for the list of dataframes on which to run a randomforest
set.seed(1)
for(i in 1:5){
dfs[[i]] <- sample_n(mtcars, size = 10, replace = FALSE)
}
列表现在包含 dfs_slicker_approach <- lapply(seq(5),
function(i) sample_n(mtcars, size = 10, replace = FALSE))
列表,其中包含来自dfs
数据集的10个随机选择的行。 (显然,你需要更新它以满足你的需求。)
然后我们使用data.frames
函数在此列表上运行mtcars
函数,如下所示:
randomForest
再次,更改语法以选择您有兴趣预测的列。 lapply
列表现在包含所有rfs <- lapply(dfs, function(m) randomForest(mpg ~ .,
data = m, importance = TRUE ))
个对象。您可以使用rfs
再次访问这些内容。对于instnace,如果我们想要预测值,我们可以这样做:(我们只将第一组预测子集化,以避免打印大量信息)
randomForest
答案 1 :(得分:2)
虽然没有偏离Nick的解决方案,但这是一种使用tidyverse
workflow的方法。重点是:通过管道读取代码,使用dplyr
动词和purrr
功能,并将数据,模型和预测保持在一个漂亮整洁的元素中。
library(randomForest)
library(tidyverse)
set.seed(42)
analysis <- rerun(5, sample_n(mtcars, size = 10, replace = FALSE)) %>%
tibble(data = .) %>%
rownames_to_column("model_number") %>%
mutate(models = map(data, ~randomForest(mpg ~ ., data = .x, importance = TRUE))) %>%
mutate(predict = map(models, ~predict(.x)))
然后,您可以在需要时获得所需内容....
comparison <- analysis %>%
mutate(actual = map(data, "mpg")) %>%
unnest(predict, actual)
comparison
# A tibble: 50 × 3
model_number predict actual
<chr> <dbl> <dbl>
1 1 14.10348 14.7
2 1 16.78987 15.0
3 1 15.14636 17.3
4 1 15.81265 15.5
5 1 24.11492 21.5
6 1 24.24701 22.8
7 1 15.84953 10.4
8 1 21.72781 32.4
9 1 21.78105 21.0
10 1 15.58614 16.4
# ... with 40 more rows
...轻松查看结果。
ggplot(comparison, aes(actual, predict)) +
geom_point() +
facet_wrap(~model_number, nrow = 1)