使用 R 进行套索居中和标准化

机器算法验证 r 标准化
2022-04-10 03:00:42

我正在使用 glmnet 包进行套索回归。我阅读了这些主题:在进行多元回归时,什么时候应该将预测变量居中以及什么时候应该标准化它们?需要在回归中对数据进行中心化和标准化,以及在 Lasso 之前进行标准化真的有必要吗?.

根据回复,我决定在使用数据之前需要对其进行标准化。不过,我确实有一些问题:

  • 我需要标准化预测变量和响应还是仅标准化预测变量?
  • 我正在使用函数 scale(myData, center = TRUE, scale = TRUE) 来构建模型,但我想知道当我想用测试数据集进行预测时该怎么做。我想我也应该标准化和集中测试数据,但我该怎么做呢?从初始(训练)数据集中减去平均值并将其除以初始数据集的标准差?
  • 当我得到一个结果时,我是否需要“反向缩放”它(使用原始平均值和标准差)还是我已经得到“最终”结果?
3个回答

一般来说,您担心缩放响应是正确的。如果你优化 LASSO 所基于的那种函数,

minβ||YXβ||22+λ||β||1,

然后用一些常数缩放响应Yα

minβ||αYXβ||22+λ||β||1

导致

minβα2||YXβ/α||22+λ||β||1.

上的正方形,它在接受的答案中缺失。除以导致 αα2

minβ||YXβ/α||22+(λ/α)||(β/α)||1,

它描述了一个解决方案,该解决方案的执行方式与原始问题的解决方案不同,因为正则化常数有效地改变了。

但是,如果您查看 的文档glmnet,您会发现默认行为是对使用对数间隔网格,并根据标准化 (!) 响应和预测变量选择网格范围。λ

因此,根据glmnet文档,您的第一个问题的答案是:如果您对所有参数使用默认值,则标准化响应不会对性能产生很大影响,因为网格都是使用标准化响应。对于非默认参数(例如,通过设置为较低的值在网格中使用较少的值),它可能会产生较大的影响,您必须小心。此外,这不会延续到,例如,在没有使用网格的情况下,更改响应规模可能会极大地影响性能。λλnlambdasklearn

您的第二个和第三个问题的答案是,默认情况下,包在使用数据之前对其进行标准化,并在返回之前重新调整系数。

如果您使用glmnet,则缩放由包执行。您无需担心缩放测试集,因为“系数始终以原始比例返回”。

默认:

glmnet(x, y, [...]
standardize = TRUE,
intercept = TRUE,
standardize.response = FALSE [...])

至于响应的标准化,它不应该在交叉验证后改变模型的性能,你可以设置λstandardize.response = FALSE

确实 LASSO 解决了

minβYXβ22+λβ1

缩放系数,问题就变成了Yα>0

minβαYXβ22+λβ1

这相当于

minβαYXβ/α22+λβ1

minβYXβ/α22+λβ/α1

所以它具有相同的λ

对于 lasso 回归,标准化是必不可少的。这是因为套索找到了受系数总和绝对值约束的最佳解决方案。如果没有缩放系数,答案将完全取决于系数的缩放。例如,在而不是上使用套索会给出非常不同的答案。对于第二组变量,使用套索几乎可以保证 y 的系数为零。查看glmnet帮助,我好像记得它会自动缩放数据x1,x2x1,y=110000x2