Python如何用L1正则化进行稀疏特征过滤_Lasso回归系数惩罚实操

星强小哥_2702

星强小哥_2702

2026-04-10

647人浏览

原创

Lasso系数可为0因其L1惩罚的菱形等高线易在角点截断系数,Ridge的L2圆形等高线仅收缩不归零;故Lasso能特征筛选,Ridge不能。

python如何用l1正则化进行稀疏特征过滤_lasso回归系数惩罚实操

为什么Lasso的系数会变成0,而Ridge不会

Lasso用的是L1范数惩罚项(即系数绝对值之和),它的等高线是菱形,在坐标轴交点处梯度不连续,优化过程容易“撞上角点”,导致某些系数被精确压缩为0;Ridge用L2范数(系数平方和),等高线是圆形,只会让系数趋近于0但极少真正归零。

这意味着:只有Lasso能天然做特征筛选,Ridge只适合缓解共线性或过拟合,不能删特征。

  • Lasso的alpha越大,稀疏性越强——但太大时所有系数都变0,模型失效
  • 数据必须标准化(StandardScaler):否则量纲差异会让大数值特征“占便宜”,小数值特征被误杀
  • Lasso对异常值敏感,建议先用RobustScaler或剔除明显离群点

如何用sklearn的Lasso选特征并解释结果

核心不是调参,而是看lasso.coef_哪些是严格等于0,对应特征就是被过滤掉的。注意:浮点计算下可能有极小非零值(如1e-15),应设阈值判断。

from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler
import numpy as np
<p>X_scaled = StandardScaler().fit_transform(X)
lasso = Lasso(alpha=0.1, max_iter=2000)
lasso.fit(X_scaled, y)</p><h1>获取非零系数的特征名</h1><p>mask = np.abs(lasso.coef_) > 1e-5
selected_features = [f for f, m in zip(feature_names, mask) if m]
print("保留特征:", selected_features)</p>
  • max_iter常需调大,默认1000在高维或病态数据下易不收敛,报ConvergenceWarning
  • alpha没固定最优值,用LassoCV自动交叉验证更稳,但要注意cv=5默认较慢,小数据可改cv=3
  • 别直接用lasso.feature_importances_——Lasso没这个属性,那是RandomForest的

LassoCV自动选alpha后,系数还是全非零?

常见于特征维度远小于样本量、或特征间高度相关(如多重共线性)。Lasso在共线特征中会随机保留一个、压掉其余,但有时全部“幸存”——这不是bug,是L1惩罚在当前alpha下尚未强到触发截断。

Python Hardener
Python Hardener

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

下载
  • 检查LassoCV返回的alpha_值:如果它非常小(如0.001),说明数据本身不易稀疏,强行加大alpha可能更实用
  • 用np.linalg.cond(X_scaled)看条件数:>1000说明共线严重,考虑先用PCA降维或手动合并相似特征
  • 换LogisticRegression(penalty='l1', solver='liblinear')(分类)或LinearSVC(penalty='l1', dual=False)(支持向量机版L1),它们在某些场景下稀疏性更强

过滤后的特征再训练模型,性能反而下降?

稀疏过滤本质是牺牲部分拟合能力换可解释性与泛化鲁棒性。性能下降不等于做错了——重点看验证集/测试集是否更稳定,以及业务是否真需要“可解释的少量特征”。

  • 别在过滤后立刻用原始X训练新模型:必须用同样标准化后的X_scaled[:, mask],否则尺度错乱
  • 如果下游是树模型(如RandomForest),Lasso过滤可能适得其反——树本身抗噪声、不依赖线性假设,硬筛反而丢信息
  • 真正关键的是:你过滤的目的是部署轻量化(减少API字段)、审计合规(解释每个输入影响),还是单纯想降维?目标不同,评估指标就该不同

稀疏性不是银弹,alpha调得再细,也掩盖不了特征工程本身的质量问题——如果原始特征里本就没有强信号,Lasso只会沉默地删掉一堆噪音,然后给你一个看起来干净、实则无力的模型。

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

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.07.20

1891

4

python能做什么
python能做什么

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

2023.07.25

5224

7

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

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

2023.07.31

1829

3

python教程
python教程

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

2023.08.03

31597

23

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

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

2023.08.04

3747

5

python eval
python eval

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

2023.08.04

3747

5

scratch和python区别
scratch和python区别

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

2023.08.11

1263

5

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

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

2023.08.10

616

4

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

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

2023.08.11

2903

5

热门下载

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

精品课程

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