R:套索参数的交叉验证以及与cv.glmnet的比较

时间:2018-06-04 18:32:35

标签: r machine-learning compare

我有两个关于交叉验证的问题。我试图为自己创建一个交叉验证代码,以提高我的直觉。特别是我找到了Lasso的最佳惩罚参数lambda。

以下是我的简历代码:

CV_lambda <- matrix(0, length(lambda_grid), 2)
colnames(CV_lambda) <- c("lambda", "CV-est")

#Loop for a vector of Lambda values
for(l in 1:length(lambda_grid)){
  #Number of folds
  nfolds <- 5
  #Fold IDs
  foldid <- sample(rep(seq(nfolds), length = N))

  #Output Store
  cv_out <- as.list(seq(nfolds))
  mspe_out <- matrix(0, 1, nfolds)

  #Cross-Validation
  for(i in seq(nfolds)){
    y_train <- y[!foldid == i,]
    X_train <- X[!foldid == i,]
    #Lasso is a self-written function, estimating a lasso-regression
    cv_out[i] <- lasso(y_train, X_train, lambda=lambda_grid[l])
    predict <- X[foldid == i,] %*% cv_out[[i]]
    mspe_out[i] <- mean((y[foldid == i,] - predict)^2)
  }
  CV_lambda[l,] <- c(lambda_grid[l],mean(mspe_out))
}
lambda_opt <- CV_lambda[which.min(CV_lambda[,2]),1]

关于简历,我有两个问题。我坐在这里待了几个多小时才能找到两个问题的解决方案。如果你们中的一些人可以帮助我,我将非常感激。因为我是初学者,所以“守则”并不是很清晰。但是,我的问题如下:

为了一般的理解。 LASSO-Regression需要惩罚参数,这对结果有很大影响。目标是选择这个lambda,它减少均方预测误差。

1)在每个lambda序列中对样本的拆分是否应该相等,还是应该不同(如我的代码所示)。我有点怀疑这个。

2)由于我对代码非常不确定,我想将结果与glmnet进行比较。有办法吗? glmnet也随机抽样。然后比较是不可能的。有人知道如何用我的代码“重现”cv.glmnet结果来查找我的代码中的错误吗?

0 个答案:

没有答案