glmnet给出不同于输入的lambda值序列

时间:2016-07-15 03:05:19

标签: r machine-learning glmnet

这是一个奇怪的问题,我不确定发生了什么。当我使用cv.glmnet时,我输入了一系列lambda,但有时似乎在拟合模型中给出了不同的序列。我试图从一堆k-fold运行中找到一条平均的MSE vs lambda曲线,所以这给我带来了很多问题。现在,我有:

ridge = function(trax, tray, lambda, folds)
{
  folds_ids = array(dim=length(tray))
  for (f in 1:length(folds))
  {
    folds_ids[folds[[f]]] = f
  }
  cvfit = cv.glmnet(trax,
                tray,
                alpha=0,
                lambda=lambda,
                family='binomial',
                foldid=folds_ids,
                parallel=TRUE)
  return(cvfit)
}
ridge_lambda = seq(5e-1,1e-5,length=100)
ridge_result = ridge(trax=training_featr, 
                   tray=training_class, 
                   lam = ridge_lambda, 
                   folds = kfolds)

现在,ridge_result $ lambda和ridge_result $ cvm有时会给出99个元素而不是100个向量。我不知道为什么。我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

glmnet写得很好,幕后有很多事情要努力让你的生活更轻松。在这种情况下,我认为有两个因素在起作用:

  1. 每次随机选择折叠,这就解释了为什么你有时会看到它而不是其他人。
  2. glmnet vignette开始,如果`%dev%没有从一个lambda到下一个lambda(通常在路径的末尾附近)没有足够的变化,程序会提前停止。“
  3. 将您最终获得的套餐的这两项功能与您所看到的结果相结合。

    在实践中,我建议提供和nlambda而不是您自己的系列,因为这是作者推荐的,因为cv.glmnet将为您生成对数刻度的lambda系列。 / p>