在机器学习领域,我们经常处理包含很多变量的数据,在处理这样的数据时,就会出现多重共线性。在这种情况下,可以使用正则化回归(例如 Lasso)来避免多重共线性。
在 JMP Pro 中,正则化回归可以用作一种称为“广义回归”的方法,通过缩小参数估计值(回归系数)和选择变量,实现稳定的模型估计,从而减少多重共线性的影响。
下图显示了当回归系数被 Lasso 缩小时发生的情况。查看“原始解释变量的估计值”报告,我们可以看到影响较小的解释变量已缩小为 0,这证实了 Lasso 正在进行变量选择。

那么在存在多重共线性的情况下,Lasso 回归如何发挥作用?在本文中,我们使用与响应(Y)的真实关系已预先确定的假设数据,并检查套索回归、多元回归分析和逐步方法对真实模型的估计准确性。
目录
虚拟数据
响应变量:Y
解释变量:X1至X20(20个变量)
Y 由正态随机数生成,其平均值是几个解释变量的线性组合,标准误差为 10。

我们将以这种格式准备两种类型的数据,并比较 Lasso 回归的有效性。
1. 解释变量之间相关性较小的数据
2. 解释变量之间存在一定程度的相关性(多重共线性)的数据
这使我们能够检查多重共线性的存在或不存在如何影响变量选择和模型估计。
*这两类样本数据已附于本文。
1. 解释变量之间相关性较小的数据示例
数据:“data_without_correlation.jmp”
解释变量之间的相关性(r) :-0.06至0.10

利用这些数据,采用多元回归分析、逐步回归(停止规则:最小BIC)和Lasso回归(验证方法:BIC)拟合模型,所得回归系数汇总于下表。 “真实方程”列列出了用于生成 Y 的解释变量的真实系数。

在逐步法中,没有被选中的变量的系数显示为0,在Lasso回归中,如果通过正则化将某个系数缩小为0,那么它也显示为0。
这些结果证实,这两种方法估计的模型都接近真实方程,无效变量的系数为零或非常小。
换句话说,在解释变量之间几乎没有相关性的数据中,多元回归分析、逐步方法和套索回归都能够以较高的准确度估计真实的响应关系。
2. 解释变量之间存在一定相关性的数据示例
数据:“data_without_correlation.jmp”
解释变量之间的相关性(r):-0.50~0.52

对于这样的数据,解释变量之间的相关性很容易使得回归系数估计变得不稳定。如果对这些数据进行多元回归分析,VIF 将会非常大,并且多重共线性的影响将会很明显。

与情况 1 一样,我们使用多元回归分析、逐步回归和套索回归来拟合模型,并提供一个表格来总结所获得的系数。

在多元回归分析中,多重共线性的影响导致系数与真实值有显著差异。
即使采用逐步法,也没有选出重要的变量,选择了不必要的变量,也没有根据真实方程进行正确的变量选择。
另一方面,使用 Lasso 回归,如案例 1 中所示,我们能够将无效解释变量缩小到 0,并获得有效变量的几乎准确的估计值。
3. Lasso系数的模拟
在迄今为止的示例中,我们使用的数据是使用随机正态函数从一组正态随机数中生成的。然而,由于这些是随机数,结果可能会根据所选的随机数而有所不同。
使用 JMP 中的“模拟”功能,您可以根据大量正态随机数集重复估计,以获得回归系数的模拟分布。这使我们能够使用 Lasso 回归来评估变量选择的有效性和可靠性。
在这里,我们使用模拟来检查在对“有点相关的数据”(情况 2)执行 Lasso 回归时,无效变量缩小到 0 的频率,以及有效变量估计为非零的频率。
在 JMP 中运行模拟的步骤
运行 Lasso 回归时,我们展示如何对估计值运行 500 次模拟。
- 右键单击 Lasso 报告“原始解释变量的估计值”中的“估计值”数字,然后选择“模拟”。
- 将出现一个模拟窗口,因此将源列设置为 Y,将目标列设置为 Y。将样本数设置为 500(模拟次数),将随机种子值设置为 123456(为了方便重现结果而指定的值)。

这将输出一个新的数据表,其中包含从 500 次模拟中获得的回归系数分布。
如果在输出数据表上运行脚本“单变量分布”,则会显示每个变量的模拟分布。此外,“零的数量”和“零的百分比”将显示在“摘要统计”报告中。

上面得到的每一个变量的零的数量和零的百分比都汇总在一个表中。

在真实方程中不起作用的变量通过 Lasso 回归高度收缩为 0。另一方面,真实方程中系数绝对值较大的变量(例如X7、X12)在500次模拟中从未缩减为0,这表明它们总是可以纳入模型中。
模拟证实,即使在多重共线性数据的情况下,Lasso回归也可以高概率地消除无效变量并稳定地选择重要变量。
但在实际应用中请注意,在具有强多重共线性的数据中,Lasso 回归倾向于仅选择一个高度相关的解释变量,而排除其他变量。
作者:Naohiro Masukawa(JMP 日本)
Naohiro Masukawa - JMP 用户社区