ElasticNet回归

所属分类:回归分析

这个方法是做什么的

把 L1 与 L2 两种惩罚混在一起:惩罚项是 alpha × [l1_ratio × L1 + (1 − l1_ratio)/2 × L2]。L1 那半负责稀疏化,把系数压到恰好 0;L2 那半负责稳定化,让一组彼此高度相关的变量系数彼此接近、倾向于被一起保留(分组效应)。l1_ratio 就是这两者之间的刻度:趋近 1 时行为接近「Lasso回归」,趋近 0 时接近「岭回归(Ridge)」。它比纯 Lasso 的变量选择稳——Lasso 在共线组里任选其一,换批样本就换一个;代价是它更不稀疏,留下的变量更多。

参数默认自动寻优:交叉验证在 alpha 与 l1_ratio 的网格上最小化 MSE;打开控件里的“手动指定参数”可以自己填 alpha 与 l1_ratio。惩罚对量纲敏感,全部自变量统一标准化,标准化被放进 Pipeline、在每个训练折内独立拟合,避免信息泄漏。主结果是交叉验证的 R²、RMSE、MAE(均值 ± 标准差、折间均值 95% 置信区间)与训练集回代值的对照及过拟合差量;系数表给非标准化系数 B、标准化系数 β 与“是否保留”,不给 t 值与 p 值。第四张卡除了 200 次自助重抽给出的 β 95% 百分位区间与入选频率,还多一张别处没有的表:固定 alpha、把 l1_ratio 从 0.00 扫到 1.00,逐档列出交叉验证 R² 与非零系数个数。

需要准备什么数据

  • 放入[定量]因变量Y:定量变量(数值)
  • 放入[定量]自变量X:至少 1 个,定量变量(数值)

数据要求

  • 数据表至少 20 行。
  • 单列缺失率不超过 30%。
  • 不接受取值全都一样的列(零方差列没有可分析的变异)。

以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。

什么时候用它

  • 自变量里有成组同源的指标(同一量表的几个维度、几个高度相关的经济指标),既想压缩变量又不愿同组变量被随机砍掉
  • 跑过「Lasso回归」,发现换一批样本选出来的变量集合就变了
  • 想在“全部保留”与“最稀疏”之间调一个刻度,并且想知道这个刻度到底值不值得调
  • 目标是预测,需要自带交叉验证的样本外评估

因变量与全部自变量必须是定量、非常数列;列表删除缺失后的有效样本量必须大于自变量个数加一。交叉验证折数按样本量自动取,最多 10 折,样本少时会降到 2~4 折,此时每个验证折更大、折间标准差反而更小,但折间均值 95%CI 的自由度只剩折数减一,区间会很宽——别把小的标准差读成估计更准。第一张卡除了 VIF 与条件数,还会判定当前 l1_ratio 落在哪个区间并说明它的行为偏向哪一端——这一行决定了后面几节该怎么读。

什么时候不要用它

  • 完全不需要任何变量被置零,只想把共线下的系数稳住:直接用「岭回归(Ridge)」,它还照常给出系数的 t 值与置信区间(条件于所选的 K),而本模块不提供。
  • 要的是最短的变量清单,共线组里留哪一个都无所谓:用「Lasso回归」,同样的 alpha 下它比混合惩罚更稀疏。
  • 要的是每个系数的无偏偏效应与 p 值:惩罚估计给不了,用「线性回归 (最小二乘法)」;先想弄清共线到底出在哪几个变量上,用「VIF共线性诊断」。
  • 变量该怎么分组是理论早就定好的,你要检验的是某一组有没有带来额外解释力:那是增量问题,用「分层回归」看 ΔR² 与 ΔF,而不是让惩罚项替你决定。
  • 只想知道哪些候选变量与因变量关联强、给它们排个序:用「特征筛选」,它做的是逐个变量与目标的单变量筛选,比拟合一个惩罚模型更直接。
  • 自变量有定类列,或因变量不是数值型:本模块只收定量列,定类自变量先用“数据编码”转成数值,或改用会自动做哑变量编码的「线性回归 (最小二乘法)」;因变量是 是 / 否 用「逻辑回归」,是等级用「有序逻辑回归」,是计数用「计数数据回归」。

容易误读的地方

  • 自动寻优永远不会把 l1_ratio 选成 0 或 1。 自动搜索的候选只有 0.1、0.3、0.5、0.7、0.9 这几档,所以“自动”给出的一定是混合模型,既不会退化成纯岭、也不会退化成纯 Lasso。想要纯粹的一端,要么打开手动指定自己填 0 或 1,要么直接去用「岭回归(Ridge)」或「Lasso回归」。特别注意手动填 0 的情形:那就是纯 L2,不会有任何变量被压掉。
  • 入选频率接近 100% 不一定说明变量稳,可能只是 l1_ratio 太小。 表注写明了这层依赖:l1_ratio 越接近 0,L2 项几乎不产生稀疏,入选频率自然贴着 100%,那一列的信息量就很有限。读这一列之前先看第一张卡对 l1_ratio 落点的判定;在 l1_ratio 很小的情况下,真正有判别力的是自助区间跨不跨 0,而不是入选频率。
  • 分组效应让共线变量一起留下,但不等于组里每一个都独立重要。 L2 项使同组变量的系数彼此接近、同进同出,表面上看像“这几个都重要”,实际它们承载的是同一份解释力,谁也不独占。这里的 β 排序在共线组内部不可信。要知道某个变量的唯一贡献有多少,得回到「线性回归 (最小二乘法)」看半偏 r²,而且那也只在共线可控时才好解读。
  • l1_ratio 敏感性表的各行区间若大幅重叠,说明这个参数其实没选出什么。 重叠意味着从纯岭到纯 Lasso 的整条刻度上预测性能几乎没差别,这时应当优先选更稀疏(l1_ratio 更大)的模型,因为它更好解释。反过来若某一行明显更好,也要看同一行的折间标准差——差别可能只来自一两折的波动,而不是真实优势。
  • 系数是有偏收缩估计,而且参数是同一批数据选出来的。 不能把全变量最小二乘的 p 值搬来标注这些系数,经典 t 检验的抽样分布在惩罚估计下不成立。同时 alpha 与 l1_ratio 都由同一份交叉验证挑出,再用这份交叉验证报告性能会有乐观偏倚,模块没有做嵌套交叉验证并如实声明了这一点;第四张卡的自助区间也没有计入参数选择的不确定性,因此偏窄,应作保守解读。要下推断性结论,得在独立样本上重做。

报告里有什么

  1. 输出结果一:数据概览与前提检验
  2. 输出结果二:交叉验证性能与 ElasticNet 系数
  3. 输出结果三:拟合效果、系数图与正则化路径
  4. 输出结果四:系数不确定性、入选稳定性与参数敏感性
  5. 输出结果五:结论与学术表述
真实值与预测值对比(训练集回代)
图1 真实值与预测值对比(训练集回代)
两条线分别为样本真实值与模型预测值(横轴为样本序号)。**注意这是训练集回代**,不是样本外预测——样本外表现请看表5 的交叉验证列。
标准化系数图
图2 标准化系数图
柱高为标准化尺度下的系数 β(红色虚线为 0 参考线),可直接比较各自变量在当前正则化约束下的相对影响强弱与方向。
ElasticNet 正则化路径
图3 ElasticNet 正则化路径
横轴为 log₁₀(alpha)(左侧惩罚弱、右侧惩罚强),纵轴为标准化系数;黑色虚线标出本次选定的 alpha = 0.047508(l1_ratio 固定为 0.100)。

在线统计分析平台 · 233 种分析方法 · AI 智能解读

在线使用
使用教程