如何在 R 中使用 glmnet 报告 Lasso 的 RMSE

机器算法验证 预测模型 预言 套索 网络 毫秒
2022-03-20 00:36:49

因此,在使用 glmnet 时,我对报告 RMSE(均方根误差)作为模型准确性的指标感到困惑。

具体来说,我是报告模型本身的 RMSE(即,它如何使用用于创建它的训练数据执行)还是报告模型性能的 RMSE 与新数据(又名测试数据)?...或两者?

我想我也很困惑该cv.glmnet函数执行的交叉验证(见下文)是否是预测模型准确性所需的全部,以及是否需要对单独的测试数据集上的数据进行额外测试?...


语境:

当我运行Rcv.glmnet中函数的交叉验证版本时glmnet,它会生成一个图表,显示给定不同的 lambda 值(“正则化参数”)模型的各种迭代的 MSE(均方误差)。

glmnet lambda 与 MSE

MSE 值存储在$cvm.

现在,我可以取任何 CV 迭代模型的 MSE 的平方根来计算 RMSE。

  • 就我而言,我选择使用一个标准错误规则并选择“lambda.1se”(与上面的虚线相关联),生成sqrt(mod$cvm[mod$lambda == mod$lambda.1se]).

然而...

我对这个 RMSE 值是否感兴趣?

我假设在用于预测我的测试数据的新值时,我应该报告模型的 RMSE。

  • 这是真的?

  • 如果是这样,最好的方法是简单地predict使用以下公式计算新值,然后将它们与测试数据中的实际值进行比较?

RMSE 方程

我是否正确地考虑了这一切?


作为后续:

如果我缺少测试数据集而必须使用可用数据的交叉验证,我该如何计算和报告 RMSE?

  • 该交叉验证过程是否与函数中执行的交叉验证过程分开cv.glmnet
1个回答

具体来说,我是报告模型本身的 RMSE(即,它如何使用用于创建它的训练数据执行)还是报告模型性能的 RMSE 与新数据(又名测试数据)?...或两者?

这些分别称为训练误差和测试误差。报告两者很有用,但测试错误更重要,假设您的兴趣在于模型的预测准确性。通常,由于过度拟合,训练误差是对整个群体真实误差的乐观偏差估计。

如果是这样,最好的方法是简单地使用 predict 计算新值,然后使用以下等式将它们与测试数据中的实际值进行比较?

是的。

如果我缺少 tet 数据集而必须对可用数据进行交叉验证,我该如何计算和报告 RMSE?

几乎相同的方式。问题是您还需要使用交叉验证来选择套索惩罚。处理这个问题的方法是使用嵌套的交叉验证——也就是说,在交叉验证循环的每一折内,在训练部分做更多的交叉验证循环来选择 lasso 惩罚。