我希望确认我对glmnet包中的CV程序的理解,以便向我的论文的评论者解释。如果有人可以添加信息以进一步澄清答案,我将不胜感激。 具体来说,我有一个二进制分类问题,29个输入变量和106行。我没有分成训练/测试数据(并且进一步减少训练数据),而是选择了通过交叉验证选择lambda作为最小化过度拟合的手段。在使用cv.glmnet训练模型后,我在相同的数据集上测试了它的分类准确性(引导时间为x 10000,错误间隔)。我承认在这种情况下不能消除过度拟合,但是通过交叉验证选择其惩罚术语的套索将减少其影响。 我对cv.glment如何做到这一点的评论者(像我这样的医生)的解释是:
在10倍交叉验证的每个步骤中,将数据随机分成两组,其中包含用于训练的9/10数据和用于内部验证的1/10(即,测量用该λ开发的模型的二项式偏差/误差)。绘制了Lambda vs. deviance。当该过程再重复9次时,得出λ与偏差的95%置信区间。进入模型的最终λ值是在高λ和低偏差之间给出最佳折衷的值。高lambda是使过度拟合最小化的因素,因为不允许通过为变量分配大系数来改进回归模型。然后使用最小二乘近似对整个数据集训练模型,最小化由λ项惩罚的模型误差。因为lambda术语是通过交叉验证(而不是整个数据集)选择的,所以lambda的选择在某种程度上与数据无关。
我怀疑我的解释可以得到很大改善,或者专家们在阅读本文时指出的方法存在缺陷。 提前谢谢。
答案 0 :(得分:0)
我想有点晚了,但这里是。
默认情况下 glmnet 选择 lambda.1se
。它是 MSE 在最小 MSE 的一个标准误差范围内的最大 λ。沿着过拟合的思路,这通常通过选择一个更简单的模型(较少的非零项)来减少过拟合,但其误差仍然接近误差最小的模型。您也可以查看此 post。不太确定您的意思是否是“进入模型的最终 lambda 值是在高 lambda 和低偏差之间提供最佳折衷的值。”
您的方法的主要问题是在相同的训练数据上计算其准确性。这并不能告诉您模型在看不见的数据上的表现有多好,并且引导程序不能解决准确性方面的错误。对于错误的估计,您实际上应该使用交叉验证中的错误。如果您的模型对 90% 的数据不起作用,那么我看不出使用所有训练数据的效果如何。