Итак, у меня есть задание, в котором я должен создать 3 разные модели (r).Я могу сделать их индивидуально без проблем.Однако я хочу сделать еще один шаг вперед и создать функцию, которая обучит их всех циклу for.(Я знаю, что мог бы создать функцию, которая бы обучала 3 модели каждый раз. Я не ищу других решений проблемы, я хочу сделать это таким образом (или аналогичным образом), потому что теперь у меня есть 3 модели, но представьте, еслиЯ хотел тренироваться 20!
Я пытался создать список для хранения всех трех моделей, но у меня продолжают появляться некоторые предупреждения.
library(caret)
library(readr)
library(rstudioapi)
library(e1071)
library(dplyr)
library(rpart)
TrainingFunction <- function(method,formula,data,tune) {
fitcontrol <- trainControl(method = "repeatedcv", repeats = 4)
if(method == "rf") {Model <- train(formula, data = data,method = method, trcontrol = fitcontrol , tunelenght = tune)}
else if (method == "knn"){
preObj <- preProcess(data[, c(13,14,15)], method=c("center", "scale"))
data <- predict(preObj, data)
Model <- train(formula, data = data,method = method, trcontrol = fitcontrol , tunelenght = tune)
}
else if (method == "svm"){Model <- svm(formula, data = data,cost=1000 , gamma = 0.001)}
Model
}
Так что это обучающая функция, которую я создал, и онаработает, но теперь я хочу тренировать все три сразу!
Итак, я попробовал это:
methods <- c("rf","knn","svm")
Models <- vector(mode = "list" , length = length(methods))
for(i in 1:length(methods))
{Models[i] <- TrainingFunction(methods[i],Volume~.,List$trainingSet,5)}
Это предупреждения:
Warning messages:
1: In Models[i] <- TrainingFunction(methods[i], Volume ~ ., List$trainingSet, :
number of items to replace is not a multiple of replacement length
2: In Models[i] <- TrainingFunction(methods[i], Volume ~ ., List$trainingSet, :
number of items to replace is not a multiple of replacement length
3: In svm.default(x, y, scale = scale, ..., na.action = na.action) :
Variable(s) ‘ProductType.GameConsole’ constant. Cannot scale data.
4: In Models[i] <- TrainingFunction(methods[i], Volume ~ ., List$trainingSet, :
number of items to replace is not a multiple of replacement length
Когда я делаюМодели выводятся так:
[[1]]
[1] "rf"
[[2]]
[1] "knn"
[[3]]
svm(formula = formula, data = data, cost = 1000, gamma = 0.001)