岭回归是否可用于求解超定方程?有无对应Python实现方法?
岭回归求解超定方程问题解答
少见岭回归解超定方程案例的原因
岭回归本身完全可以用于求解超定方程,不存在原理层面的限制,相关案例少主要有两个原因:
- 分类习惯问题:岭回归通常被归类到统计回归的优化方法范畴,其解决的共线性、病态矩阵问题,本质就是超定方程求解中遇到的非满秩、条件数过大场景,大部分资料不会特意单独标注“用于求解超定方程”这个使用场景,属于归类差异
- 普通场景没必要使用:常规良态超定方程的求解用普通最小二乘法得到的结果已经无偏且足够准确,岭回归引入的L2正则项会带来估计偏差,非病态场景没有使用必要,因此针对性的案例较少
Python中岭回归求解超定方程的实现
岭回归求解超定方程的逻辑是在普通最小二乘的损失函数基础上增加L2正则项,损失函数为 min(||Ax - b||₂² + λ||x||₂²),其中λ为正则系数,取值≥0。
现成调用方法
可以直接使用scikit-learn库的Ridge类实现,和numpy.linalg.lstsq()的调用便捷度相当,示例如下:
import numpy as np from sklearn.linear_model import Ridge # 构造超定方程样本:A为m行n列矩阵,m>n A = np.random.rand(10, 3) b = np.random.rand(10) # 初始化模型,fit_intercept设为False是因为求解纯线性方程无需截距项,alpha对应正则系数λ ridge_model = Ridge(alpha=0.5, fit_intercept=False) ridge_model.fit(A, b) # 得到超定方程的岭回归近似解 x_solve = ridge_model.coef_
轻量手动实现
如果不想引入第三方机器学习库依赖,也可以直接通过numpy实现岭回归闭式解,公式为 x = (AᵀA + λI)⁻¹Aᵀb,示例如下:
lambda_reg = 0.5 I = np.eye(A.shape[1]) x_solve = np.linalg.inv(A.T @ A + lambda_reg * I) @ A.T @ b
注意事项
- 当正则系数λ设为0时,岭回归的结果和普通最小二乘完全一致
- 病态超定矩阵场景下,可以适当调高λ取值,大幅提升解的稳定性,避免普通最小二乘结果波动过大的问题
内容的提问来源于stack exchange,提问作者mike1ocean
相关产品推荐
相关产品推荐

