В настоящее время я прохожу онлайн-курс «Наука о данных: машинное обучение», и нас просят подобрать lm 100 раз и получить значения среднего (rmse) и sd (rmse) для наборов данных разного размера n = c (100,500,1000,5000,10000). нас просят создать функцию, которая принимает размер n и строит набор данных, затем запускает l oop, созданный для подбора 100 моделей, затем устанавливает начальное число и использует функцию map () или sapply () для применения нашего нового функция для n разных размеров.
Код, который я сделал, показывает мне ошибку «Ошибка в dat $ y: $ operator недействителен для atomi c vectors» при запуске f1 Это мой код:
library(MASS)
library(caret)
ff=function(n){
Sigma <- 9*matrix(c(1.0, 0.5, 0.5, 1.0), 2, 2)
dat <- MASS::mvrnorm(n, c(69, 69), Sigma)%>%data.frame() %>% setNames(c("x", "y"))
}
set.seed(1,sample.kind = "Rounding")
n=c(100,500,1000,5000,10000)
f1=map(n,function(dat){
rmse=replicate(100,{
y <- dat$y
test_index <- createDataPartition(y, times = 1, p = 0.5, list = FALSE)
train_set <- dat %>% slice(-test_index)
test_set <- dat %>% slice(test_index)
fit <- lm(y ~ x, data = train_set)
y_hat <- fit$coef[1] + fit$coef[2]*test_set$x
sqrt(mean((y_hat - test_set$y)^2))
})
structure(c(mean(rmse),sd(rmse)))
})
Спасибо за помощь !!