Я прекрасно понимаю вашу озабоченность, потому что мои вычислительные источники также очень ограничены. Однако я бы подошел к этому следующим образом, вместо того, чтобы «строить» объект model3
.
Предположим, что вы хотите достичь высочайшей точности. Тогда вам просто нужно оценить следующее: какие из model1
и model2
мы видим наивысшую точность? Тогда нас интересует только выбор параметра настройки с наилучшим результатом. Например, мы видим следующее:
> model1$bestTune$cp
[1] 0
> model2$bestTune$cp
[1] 0.2
> model1$results$Accuracy ## Respectively for cp = 0.0 and cp = 0.5
[1] 0.9333 0.3333
> model2$results$Accuracy ## Respectively for cp = 0.1 and cp = 0.2
[1] 0.9267 0.9267
Мы бы выбрали cp = 0
.
Предположим, вы разбили вещи на model1
, model2
, model3
, ... и хотите изучить все значения параметров, вводимые вручную, используя их.
k = 2 ## Here we only have model1 and model2 to compare
evaluate <- list()
for (i in 1:k) {
model = eval(parse(text = paste0("model", i)))
evaluate[["cp"]][[paste0("model", i)]] <-
model$finalModel$tuneValue$cp
evaluate[["accuracy"]][[paste0("model", i)]] <-
model$results$Accuracy[[which(model$results$cp == model$bestTune$cp)]]
}
Тогда в нашем списке evaluate
есть следующее:
> evaluate
$cp
model1 model2
0.0 0.2
$accuracy
model1 model2
0.9333 0.9267
После этого мы можем сделать
> which(evaluate$accuracy == max(evaluate$accuracy))
model1
1
> evaluate$cp[[which(evaluate$accuracy == max(evaluate$accuracy))]]
[1] 0
Теперь мы можем счастливо выбрать cp = 0
, и мы также знаем, что результат из оптимального cp
хранится в model1
.
Если вы хотите «построить» model3
, вы можете просто заменить некоторые компоненты (например, results
, в которых будут сохранены AccuracySD, KappaSD и такие метрики) после выбора того, что мы оценили как лучшая модель --- model1
в этом случае.