lasso能让系数变0而ridge不能,因l1范数在原点不可导易使系数“撞”到坐标轴归零,l2范数光滑仅收缩系数不归零;lasso具稀疏性,ridge保留所有特征。

为什么Lasso能让系数变0而Ridge不能
关键在正则化项的数学形式:Lasso用L1范数(系数绝对值之和),Ridge用L2范数(系数平方和)。L1在原点处不可导,优化时容易“撞”到坐标轴上,把某些coef_直接压到0;L2是光滑曲面,只会让系数趋近于0但永远不等于0。
这导致实际效果差异明显:
- 用
Lasso拟合含100个特征的数据,model.coef_中可能有37个是0.0 - 同样数据用
Ridge,所有coef_都非零,只是数值变小 - 如果原始特征存在强相关(比如
income_month和income_annual),Lasso大概率只留一个,Ridge会把权重分摊给两个
sklearn中Ridge与Lasso的alpha参数行为不一致
alpha都控制正则强度,但影响方式不同:
-
Ridge(alpha=0)等价于普通线性回归,alpha越大,所有系数收缩越均匀 -
Lasso(alpha=0)也退化为普通线性回归,但alpha稍增大(如0.01)就可能让部分系数跳变为0 - 同一个
alpha值下,Lasso产生的稀疏性远高于Ridge——别直接拿alpha=1对比两者效果 - 调参时
Lasso建议用LassoCV,它内部用交叉验证自动选alpha,比手动网格搜索更稳
什么时候该选Ridge而不是Lasso
不是“哪个更先进”,而是业务逻辑决定:
- 所有特征都有明确业务含义且必须保留(比如风控模型里的
age、credit_score、employment_length),选Ridge - 输入特征含大量噪声或冗余(如文本TF-IDF后生成的上万维向量),
Lasso能自动砍掉低贡献维度 - 训练集样本量远小于特征数(
n_samples ),<code>Ridge解唯一,Lasso可能无解或解不稳定 - 需要模型可解释性且要求“每个变量都参与预测”,
Ridge输出的系数符号和量级更稳定
实际代码里容易忽略的预处理陷阱
两个模型对数据尺度极度敏感,但很多人只标准化X却忘了y:
-
Ridge和Lasso都要求特征做StandardScaler,否则alpha对不同量纲特征的惩罚力度失衡 - 千万别对
y做标准化再喂给模型——predict()结果要还原回原始单位,否则RMSE失去业务意义 - 用
Pipeline时注意顺序:StandardScaler必须在Ridge/Lasso之前,否则fit_transform会泄露测试集信息 - 分类任务误用回归模型?确认目标变量是连续值——
Lasso不能直接用于y为类别标签的场景
真正难的是理解业务中“稀疏”是否等于“更好”:砍掉的特征可能在特定子群体中起关键作用,但模型不会告诉你这点。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











