我想知道如何在 R 中使用 glmnet 正确训练和测试 LASSO 模型?
- 具体来说,我想知道如果缺少外部测试数据集需要我使用交叉验证(或其他类似方法)来测试我的 LASSO 模型,该怎么做。
让我分解一下我的场景:
我只有一个数据集来通知和训练我的 glmnet 模型。因此,我将不得不使用交叉验证来拆分我的数据以生成一种方法来测试我的模型。
我已经在使用cv.glmnet
,根据包的详细信息:
对 glmnet 进行 k 折交叉验证,生成绘图,并返回 lambda 的值。
执行交叉验证
cv.glmnet
只是为了选择最好的 lambda,还是作为更通用的交叉验证程序?- 换句话说,我还需要做另一个交叉验证步骤来“测试”我的模型吗?
我正在假设“是的,我愿意”。
既然如此,我该如何交叉验证我的cv.glmnet
模型?
我必须手动执行此操作,还是该
caret
功能对 glmnet 模型有用?我是否使用交叉验证的两个同心“循环”?...我是否使用 CV via 的“内循环”来确定k折交叉验证处理的“外部循环”的每个k折中
cv.glmnet
的最佳 lambda 值?如果我对我已经交叉验证的模型进行交叉验证,我如何在交叉验证的“外部循环”的每个折叠中
cv.glmnet
从每个模型中分离出“最佳”模型(从“最佳”lambda 值) ?cv.glmnet
- 注意:我将“最佳”模型定义为与 lambda 相关的模型,该模型在最小值的 1 SE 内产生 MSE……这是模型
$lambda.1se
中的。cv.glmnet
- 注意:我将“最佳”模型定义为与 lambda 相关的模型,该模型在最小值的 1 SE 内产生 MSE……这是模型
语境:
我正在尝试根据树直径(“D”)、D^2 和物种(“因子(SPEC)”)来预测树龄(“年龄”)。[结果方程:Age ~ D + factor(SPEC) + D^2
]。我有大约 50K 行数据,但数据是纵向的(通过时间跟踪个体)并且由大约 65 个物种组成。