【问题标题】:How to train several models within a loop for如何在一个循环中训练多个模型
【发布时间】:2017-05-02 11:42:29
【问题描述】:

我想用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])。

【问题讨论】:

    标签: r for-loop machine-learning subset r-caret


    【解决方案1】:

    这可能是与您的示例匹配的替代方法(使用 iris)。子集基于这篇文章: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="".....)
    }
    

    【讨论】:

    • 感谢您的回答。它对我不起作用,我收到以下错误:“model.frame.default(form = as.name(y) ~ ., data = subset(iris, : object is not a matrix) 中的错误”
    • 修复了如果我修改输入公式:"train(as.formula(paste(y,"~.",sep="")), subset(iris,s...."
    • 啊,没有检查实际的火车功能,但是很棒!
    【解决方案2】:

    如果您避免使用公式类并使用一个矩阵或 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")
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2015-10-01
      • 2021-05-15
      • 2020-12-15
      相关资源
      最近更新 更多