Python中怎样用Ridge和Lasso实现正则化

云墨吖_8096

云墨吖_8096

2026-11-05

109人浏览

原创

Ridge和Lasso的alpha不能直接比大小,因二者惩罚范数不同:Ridge用L2(平方和),Lasso用L1(绝对值和);相同alpha下Lasso压缩更激进,易使系数归零,而Ridge仅收缩不置零,故需分别调参、独立网格搜索。

python中怎样用ridge和lasso实现正则化

为什么Ridge和Lasso的alpha参数不能直接比大小

因为Ridge和Lasso对系数惩罚的方式不同:Ridge用L2范数(平方和),Lasso用L1范数(绝对值和)。相同alpha值下,Lasso压缩系数更激进,可能直接归零;Ridge则让所有系数都趋近于小值但不为零。所以调参时得分开搜——比如Ridge常用[0.1, 1, 10, 100],而Lasso常从0.001起试,稍大一点就可能全归零。

  • 用sklearn.model_selection.GridSearchCV分别对两个模型做交叉验证搜索,别共用同一组param_grid
  • Lasso在alpha过大会导致coef_全为0,检查前先看model.n_features_in_和np.count_nonzero(model.coef_)
  • 如果数据未标准化,Ridge和Lasso结果会严重失真——必须用StandardScaler先处理X,否则量纲大的特征被过度惩罚

怎样用coef_判断Lasso是否真的做了特征选择

Lasso的“特征选择”能力体现在coef_里有明确的0值,但要注意浮点精度问题:实际输出可能是1e-15这种极小非零数,不能直接用== 0判断。

  • 用np.isclose(model.coef_, 0, atol=1e-6)代替== 0
  • 打印选中特征名:假设feature_names是列表,运行[n for n, keep in zip(feature_names, np.isclose(model.coef_, 0, atol=1e-6)) if not keep]
  • 注意fit_intercept=True(默认)时,截距项不受正则化影响,别误把它当特征看

Ridge回归后还能用statsmodels做t检验吗

不能。Ridge引入了偏置,破坏了OLS的无偏性和标准误差的解析解,statsmodels.OLS的.summary()依赖经典假设,套在Ridge拟合的coef_上会给出错误的p值和置信区间。

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
  • 想评估稳定性?改用cross_val_score看MSE波动,或用bootstrap重采样估计coef_分布
  • 若硬要解释系数大小,优先看标准化后的系数绝对值排序,而非统计显著性
  • 某些场景需要推断(如医学建模),应考虑BayesianRidge,它提供系数后验分布,比频率学派的t检验更适配正则化语境

训练时没报错,但predict时提示X.shape[1]不匹配

这是最常见的维度陷阱:Ridge和Lasso在fit()时记下了输入特征数n_features_in_,之后predict()强制要求列数一致。但如果你用pandas.DataFrame训练、却用numpy.ndarray预测,且中间删过列或重排过顺序,就容易触发这个错误。

  • 检查训练集和预测集列名/列数是否一致:X_train.columns.equals(X_test.columns)(DataFrame)或X_train.shape[1] == X_test.shape[1](array)
  • 避免手动切片传入predict(),统一用pipeline封装缩放器和模型,例如:Pipeline([('scaler', StandardScaler()), ('ridge', Ridge())])
  • 如果用了OneHotEncoder,确保handle_unknown='error'并提前在训练集见过所有类别,否则预测遇到新类别会崩在编码层,不是模型层

实际用的时候,最常卡住的不是公式理解,而是标准化漏了、列顺序乱了、或者把Lasso的稀疏性当成绝对零来逻辑判断。这些地方一错,后面所有分析都漂移。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1871

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

5104

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1809

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

30717

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3647

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3667

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1243

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2843

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程