Повторно обучить лучшую модель на полном наборе данных в R - PullRequest
1 голос
/ 07 мая 2020

У меня есть две модели на выбор, и по некоторым критериям я выбираю одну из двух. (Ниже приведен только пример, я знаю, что это не имеет особого смысла)

library(forecast)
set.seed(4)
sample_dat= sample(1:nrow(cars), 5)
train = cars[-sample_dat, ]
test = cars[sample_dat, ]
models = list(lm(dist ~ speed, train), glm(dist ~ speed, train, family = "poisson"))
test_res = sapply(models, function(x) accuracy(predict(x, test, type = "response"), test$dist)[2]) #Getting the RMSE for each model
best_model = models[which.min(test_res)]

Как я могу переобучить лучшую модель, используя полный набор данных (поезд + тест)? Я проверил функции update и update.formula, но, похоже, они не обновляют часть данных.

Ответы [ 2 ]

3 голосов
/ 07 мая 2020
update(best_model[[1]],data = rbind(train,test))

Вы не хотите изменять формулу, поскольку это лучшая модель, а скорее обновите данные

1 голос
/ 07 мая 2020

Base R с использованием вашего собственного logi c, сначала создавая список, отражающий список моделей:

set.seed(4)
sample_dat= sample(1:nrow(cars), 5)
train = cars[-sample_dat, ]
test = cars[sample_dat, ]
models = list(lm(dist ~ speed, train), glm(dist ~ speed, train, family = "poisson"))
model_application = list(as.expression("lm(dist ~ speed, cars)$call"), 
                         as.expression("glm(dist ~ speed, cars, family = 'poisson'))$call"))
test_res = sapply(models, 
                  function(x){
                    # Store a function to caclulate the RMSE: rmse => function 
                    rmse <- function(actual_vec, pred_vec){sqrt(mean((pred_vec - actual_vec)**2))}
                    # Getting the RMSE for each model: numeric scalar => .GlobalEnv
                    rmse(test$dist, predict(x, data = test, type = "response"))
                  }
)

best_model = models[[which.min(test_res)]]
applied_model <- eval(eval(as.expression(parse(text = model_application[[which.min(test_res)]]))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...