如何在一个循环中训练多个模型
How to train several models within a loop for
我想在 的循环中使用 caret
包(7 个响应变量中的每一个) 训练多个模型。
我的 data.frame data
有 46 个预测变量(全部用于训练所有模型)和 7 个响应。
我尝试了一些 Rcode 但失败了:
models.list = list()
Ynames = names(data)[47:ncol(data)]
for(y in Ynames)
{
models.list[[y]] = train(as.name(y)~., subset(data,select=-Ynames[-y]),method="".....)
}
我的变量 Ynames
包含所有响应。
每个模型都必须使用单个响应变量进行训练。
因此对于迭代 1,我们将针对 Ynames[1]
响应和所有 46 个预测变量训练模型,但有必要从数据集 data
中排除所有非第一响应变量 (Ynames[-1]
)。
如果您避免使用公式 class 并使用一个矩阵或 data.frame 作为您的响应并使用另一个矩阵作为您的预测变量,将会更容易:
Y <- matrix(runif(700, 0, 100), ncol = 7)
X <- matrix(runif(4600, 0, 100), ncol = 46)
colnames(Y) <- paste("Y", 1:ncol(Y))
colnames(X) <- paste("X", 1:ncol(X))
library(caret)
models.list = as.list(vector(length = ncol(Y)))
for(i in 1:ncol(Y)) {
models.list[[i]] <- train(x = X, y = Y[,i], method = "lm")
}
这可能是与您的示例匹配的替代方法(使用 iris)。子集基于此 post:removing a list of columns from a data.frame using subset
models.list = list()
Ynames = names(iris)[3:ncol(iris)]
for(y in Ynames)
{
to.remove <- Ynames[!Ynames==y]
`%ni%` <- Negate(`%in%`)
models.list[[y]] = train(as.name(y)~., subset(iris,select = names(iris) %ni% to.remove),method="".....)
}
我想在 的循环中使用 caret
包(7 个响应变量中的每一个) 训练多个模型。
我的 data.frame data
有 46 个预测变量(全部用于训练所有模型)和 7 个响应。
我尝试了一些 Rcode 但失败了:
models.list = list()
Ynames = names(data)[47:ncol(data)]
for(y in Ynames)
{
models.list[[y]] = train(as.name(y)~., subset(data,select=-Ynames[-y]),method="".....)
}
我的变量 Ynames
包含所有响应。
每个模型都必须使用单个响应变量进行训练。
因此对于迭代 1,我们将针对 Ynames[1]
响应和所有 46 个预测变量训练模型,但有必要从数据集 data
中排除所有非第一响应变量 (Ynames[-1]
)。
如果您避免使用公式 class 并使用一个矩阵或 data.frame 作为您的响应并使用另一个矩阵作为您的预测变量,将会更容易:
Y <- matrix(runif(700, 0, 100), ncol = 7)
X <- matrix(runif(4600, 0, 100), ncol = 46)
colnames(Y) <- paste("Y", 1:ncol(Y))
colnames(X) <- paste("X", 1:ncol(X))
library(caret)
models.list = as.list(vector(length = ncol(Y)))
for(i in 1:ncol(Y)) {
models.list[[i]] <- train(x = X, y = Y[,i], method = "lm")
}
这可能是与您的示例匹配的替代方法(使用 iris)。子集基于此 post:removing a list of columns from a data.frame using subset
models.list = list()
Ynames = names(iris)[3:ncol(iris)]
for(y in Ynames)
{
to.remove <- Ynames[!Ynames==y]
`%ni%` <- Negate(`%in%`)
models.list[[y]] = train(as.name(y)~., subset(iris,select = names(iris) %ni% to.remove),method="".....)
}