gpt4 book ai didi

r - 如何将模型保存为带循环的矢量?

转载 作者:行者123 更新时间:2023-12-02 00:54:31 24 4
gpt4 key购买 nike

所以我有这个任务,我必须创建 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)

最佳答案

考虑 switch 来避免许多 ifelse,尤其是在扩展到 20 个模型时。然后使用lapply构建一个没有初始化或迭代赋值的列表:

TrainingFunction <- function(method, formula, data, tune) {
fitcontrol <- trainControl(method = "repeatedcv", repeats = 4)

Model <- switch(method,
"rf" = train(formula, data = data, method = method,
trcontrol = fitcontrol, tunelength = tune)
"knn" = {
preObj <- preProcess(data[,c(13,14,15)],
method=c("center", "scale"))
data <- predict(preObj, data)
train(formula, data = data, method = method,
trcontrol = fitcontrol, tunelength = tune)
}
"svm" = svm(formula, data = data, cost = 1000, gamma = 0.001)
)
}

methods <- c("rf","knn","svm")

Model_list <-lapply(methods, function(m)
TrainingFunction(m, Volume~., List$trainingSet, 5))

关于r - 如何将模型保存为带循环的矢量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com