【问题标题】:Apply Machine learning process simultaneously on multiple datasets with R使用 R 在多个数据集上同时应用机器学习过程
【发布时间】:2022-01-10 15:51:34
【问题描述】:

我想删除相关变量并对多个数据集执行 lasso 回归。所以我把我的数据分成两个列表:第一个列表包含变量,第二个包含目标。

我还想在应用 Lasso 之前将我的数据分为训练和测试,进行预测并将结果存储在最终数据框中。

主要步骤:

1- 相关性:(删除相关变量)

2- 将数据划分为训练和测试

3- 执行套索

4- 做出预测

5- 将预测及其标签存储在数据框中

谢谢!

set.seed(99)
 library("caret")
  # Create data frames
 H <- data.frame(replicate(10,sample(0:20,10,rep=TRUE)))   
 C <- data.frame(replicate(5,sample(0:100,10,rep=FALSE)))
 R <- data.frame(replicate(7,sample(0:30,10,rep=TRUE)))
 E <- data.frame(replicate(4,sample(0:40,10,rep=FALSE)))
  
 # Create target variables
 Y_H <- data.frame(replicate(1,sample(20:35, 10, rep = TRUE)))
 Y_H
 names(Y_H)<-names(Y_H)[names(Y_H)=="replicate.1..sample.20.35..10..rep...TRUE.."] <-"label_1"

 Y_C <- data.frame(replicate(1,sample(15:65, 10, rep = TRUE)))

 names(Y_C) <- names(Y_C)[names(Y_C)=="replicate.1..sample.15.65..10..rep...TRUE.."] <-"label_2" 

 Y_R <- data.frame(replicate(1,sample(25:45, 10, rep = TRUE)))
 names(Y_R) <-names(Y_R)[names(Y_R) == "replicate.1..sample.25.45..10..rep...TRUE.."] <- "label_3"


 Y_E <- data.frame(replicate(1,sample(21:80, 10, rep = TRUE)))
 names(Y_E) <-names(Y_E)[names(Y_E) == "replicate.1..sample.15.65..10..rep...TRUE.."] <- "label_4"

 # Store observations and targets in lists
 inputs <- list(H, C, R, E)

 targets <- list(Y_H, Y_C, Y_R, Y_E)

# Perform correlation
 outputs <- list()


 for(df in inputs){
     data.cor <- cor(df)
     high.cor <- findCorrelation(data.cor, cutoff=0.40)
     outputs <- append(outputs, list(df[,-high.cor]))
 }

library("glmnet")

lasso_cv <- list()
lasso_model <- list()

for(i in outputs){
   for(j in targets){
      lasso_cv[i] <- cv.glmnet(as.matrix(outputs[[i]]), as.matrix(targets[[j]]), standardize = TRUE, type.measure="mse",  alpha = 1,nfolds = 3)

      lasso_model[i] <- glmnet(as.matrix(outputs[[i]]), as.matrix(targets[[j]]),lambda = lasso_cv[i]$lambda_cv, alpha = 1, standardize = TRUE)

   }
}

当我运行我的 for 循环时,它给出了这个错误:

Error in h(simpleError(msg, call)) : 
erreur d'�valuation de l'argument 'x' lors de la s�lection d'une 
m�thode pour la fonction 'as.matrix' : invalid subscript type 'list'

【问题讨论】:

    标签: r for-loop iteration lasso-regression


    【解决方案1】:

    在我看来,错误在最后一个 for 循环的范围内。

    你写了for(i in outputs),然后使用了as.matrix(outputs[[i]])。因此,在第一次迭代中,您基本上是在调用as.matrix(outputs[[outputs[[1]]),这没有意义。类似的推理也适用于for(j in targets)

    尝试替换for(i in seq_len(length(outputs)))for(i in seq_len(length(targets)))引用的代码。那应该行得通。这样,在第一次迭代中,as.matrix(outputs[[i]]) 转换为 as.matrix(outputs[[1]]),对于另一行也是如此,在我看来这就是您正在寻找的想法。

    Ps 我不确定您的代码。如果我们检查,lasso_cv[i]$lambda_cv 会为每个 i 返回 NULL。也许你可以检查一下。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多