python机器学习库sklearn——Lasso回归(L1正则化)

article/2025/9/28 20:33:09

分享一个朋友的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开


全栈工程师开发手册 (作者:栾鹏)
python数据挖掘系列教程

Lasso

The Lasso 是估计稀疏系数的线性模型。 它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少给定解决方案所依赖变量的数量。 因此,Lasso 及其变体是压缩感知领域的基础。 在一定条件下,它可以恢复一组非零权重的精确集。

在数学公式表达上,它由一个带有$ \ell_1 $先验的正则项的线性模型组成。 其最小化的目标函数是:

m i n w 1 2 n s a m p l e s ∣ ∣ X w − y ∣ ∣ 2 2 + α ∣ ∣ w ∣ ∣ 1 \underset{w}{min\,} { \frac{1}{2n_{samples}} ||X w - y||_2 ^ 2 + \alpha ||w||_1} wmin2nsamples1Xwy22+αw1

lasso 估计解决了加上罚项$ \alpha ||w||_1 的 最 小 二 乘 法 的 最 小 化 , 其 中 , 的最小二乘法的最小化,其中, \alpha$ 是一个常数,$ ||w||_1 $是参数向量的 ℓ 1 − n o r m \ell_1-norm 1norm 范数。

Lasso 类的实现使用了 coordinate descent (坐标下降算法)来拟合系数。

设置正则化参数

scikit-learn 通过交叉验证来公开设置 Lasso中 α \alpha α 参数的对象: LassoCV 和 LassoLarsCV。 LassoLarsCV 是基于下面解释的 最小角回归 算法。

对于具有许多线性回归的高维数据集, LassoCV 最常见。 然而,LassoLarsCV 在寻找 α \alpha α 参数值上更具有优势,而且如果样本数量与特征数量相比非常小时,通常 LassoLarsCV 比 LassoCV 要快。

与 SVM 的正则化参数的比较

α \alpha α 和 SVM 的正则化参数 C C C之间的等式关系是 α = 1 / C \alpha = 1 / C α=1/C 或者 $\alpha = 1 / (n_{samples} * C) $,并依赖于估计器和模型优化的确切的目标函数。

主参数设置

alpha : float, 可选,默认 1.0。当 alpha 为 0 时算法等同于普通最小二乘法,可通过 Linear Regression 实现,因此不建议将 alpha 设为 0.

fit_intercept : boolean
是否进行拦截计算(intercept)。若 false,则不计算(比如数据已经经过集中了)。此处不太明白,仿佛与偏度有关。

normalize : boolean, 可选, 默认 False
若 True,则先 normalize 再 regression。若 fit_intercept 为 false 则忽略此参数。当 regressors 被 normalize 的时候,需要注意超参(hyperparameters)的学习会更稳定,几乎独立于 sample。对于标准化的数据,就不会有此种情况。如果需要标准化数据,请对数据预处理。然后在学习时设置 normalize=False。

copy_X : boolean, 可选, 默认 True
若 True,则会复制 X;否则可能会被覆盖。

precompute : True | False | array-like, 默认=False
是否使用预计算的 Gram 矩阵来加速计算。如果设置为 ‘auto’ 则机器决定。Gram 矩阵也可以 pass。对于 sparse input 这个选项永远为 True。

max_iter : int, 可选
最大循环次数。

tol : float, 可选
优化容忍度 The tolerance for the optimization: 若更新后小于 tol,优化代码检查优化的 dual gap 并继续直到小于 tol 为止。

warm_start : bool, 可选
为 True 时, 重复使用上一次学习作为初始化,否则直接清除上次方案。

positive : bool, 可选
设为 True 时,强制使系数为正。

selection : str, 默认 ‘cyclic’
若设为 ‘random’, 每次循环会随机更新参数,而按照默认设置则会依次更新。设为随机通常会极大地加速交点(convergence)的产生,尤其是 tol 比 1e-4 大的情况下。

random_state : int, RandomState instance, 或者 None (默认值)
pseudo random number generator 用来产生随机 feature 进行更新时需要用的

seed。仅当 selection 为 random 时才可用。

代码实现

import numpy as np # 快速操作结构数组的工具
import matplotlib.pyplot as plt  # 可视化绘制
from sklearn.linear_model import Lasso,LassoCV,LassoLarsCV   # Lasso回归,LassoCV交叉验证实现alpha的选取,LassoLarsCV基于最小角回归交叉验证实现alpha的选取# 样本数据集,第一列为x,第二列为y,在x和y之间建立回归模型
data=[[0.067732,3.176513],[0.427810,3.816464],[0.995731,4.550095],[0.738336,4.256571],[0.981083,4.560815],[0.526171,3.929515],[0.378887,3.526170],[0.033859,3.156393],[0.132791,3.110301],[0.138306,3.149813],[0.247809,3.476346],[0.648270,4.119688],[0.731209,4.282233],[0.236833,3.486582],[0.969788,4.655492],[0.607492,3.965162],[0.358622,3.514900],[0.147846,3.125947],[0.637820,4.094115],[0.230372,3.476039],[0.070237,3.210610],[0.067154,3.190612],[0.925577,4.631504],[0.717733,4.295890],[0.015371,3.085028],[0.335070,3.448080],[0.040486,3.167440],[0.212575,3.364266],[0.617218,3.993482],[0.541196,3.891471]
]#生成X和y矩阵
dataMat = np.array(data)
X = dataMat[:,0:1]   # 变量x
y = dataMat[:,1]   #变量y# ========Lasso回归========
model = Lasso(alpha=0.01)  # 调节alpha可以实现对拟合的程度
# model = LassoCV()  # LassoCV自动调节alpha可以实现选择最佳的alpha。
# model = LassoLarsCV()  # LassoLarsCV自动调节alpha可以实现选择最佳的alpha
model.fit(X, y)   # 线性回归建模
print('系数矩阵:\n',model.coef_)
print('线性回归模型:\n',model)
# print('最佳的alpha:',model.alpha_)  # 只有在使用LassoCV、LassoLarsCV时才有效
# 使用模型预测
predicted = model.predict(X)# 绘制散点图 参数:x横轴 y纵轴
plt.scatter(X, y, marker='x')
plt.plot(X, predicted,c='r')# 绘制x轴和y轴坐标
plt.xlabel("x")
plt.ylabel("y")# 显示图形
plt.show()

这里写图片描述

多任务回归

MultiTaskLasso 是一个估计多元回归稀疏系数的线性模型: $y $是一个 ( n s a m p l e s , n t a s k s ) (n_{samples}, n_{tasks}) (nsamples,ntasks) 的二维数组,其约束条件和其他回归问题(也称为任务)是一样的,都是所选的特征值。
下图比较了通过使用简单的 Lasso 或 MultiTaskLasso 得到的 W 中非零的位置。 Lasso 估计产生分散的非零值,而 MultiTaskLasso 的一整列都是非零的。

在数学上,它由一个线性模型组成,以混合的 $\ell_1 \ell_2 $作为正则化器进行训练。目标函数最小化是:

m i n w 1 2 n s a m p l e s ∣ ∣ X W − Y ∣ ∣ F r o 2 + α ∣ ∣ W ∣ ∣ 21 \underset{w}{min\,} { \frac{1}{2n_{samples}} ||X W - Y||_{Fro} ^ 2 + \alpha ||W||_{21}} wmin2nsamples1XWYFro2+αW21

其中 Fro 表示 Frobenius 标准:

∣ ∣ A ∣ ∣ F r o = ∑ i j a i j 2 ||A||_{Fro} = \sqrt{\sum_{ij} a_{ij}^2} AFro=ijaij2

并且 ℓ 1 ℓ 2 \ell_1 \ell_2 12 读取为:

∣ ∣ A ∣ ∣ 21 = ∑ i ∑ j a i j 2 ||A||_{2 1} = \sum_i \sqrt{\sum_j a_{ij}^2} A21=ijaij2

MultiTaskLasso 类的实现使用了坐标下降作为拟合系数的算法。

import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import MultiTaskLasso, Lassorng = np.random.RandomState(42)
# ===========================产生模拟样本数据=========================
# 用随机的频率、相位产生正弦波的二维系数
n_samples, n_features, n_tasks = 100, 30, 40  # n_samples样本个数,n_features特征个数,n_tasks估计值的个数
n_relevant_features = 5 # 自定义实际有用特征的个数
coef = np.zeros((n_tasks, n_features)) # 系数矩阵的维度times = np.linspace(0, 2 * np.pi, n_tasks)
for k in range(n_relevant_features):coef[:, k] = np.sin((1. + rng.randn(1)) * times + 3 * rng.randn(1)) # 自定义数据矩阵,用来生成模拟输出值X = rng.randn(n_samples, n_features)  # 产生随机输入矩阵
Y = np.dot(X, coef.T) + rng.randn(n_samples, n_tasks) # 输入*系数+噪声=模拟输出
# ==============================使用样本数据训练系数矩阵============================
coef_lasso_ = np.array([Lasso(alpha=0.5).fit(X, y).coef_ for y in Y.T])
coef_multi_task_lasso_ = MultiTaskLasso(alpha=1.).fit(X, Y).coef_  # 多任务训练# #############################################################################
# Plot support and time series
fig = plt.figure(figsize=(8, 5))
plt.subplot(1, 2, 1)
plt.spy(coef_lasso_)
plt.xlabel('Feature')
plt.ylabel('Time (or Task)')
plt.text(10, 5, 'Lasso')
plt.subplot(1, 2, 2)
plt.spy(coef_multi_task_lasso_)
plt.xlabel('Feature')
plt.ylabel('Time (or Task)')
plt.text(10, 5, 'MultiTaskLasso')
fig.suptitle('Coefficient non-zero location')feature_to_plot = 0
plt.figure()
lw = 2
plt.plot(coef[:, feature_to_plot], color='seagreen', linewidth=lw,label='Ground truth')
plt.plot(coef_lasso_[:, feature_to_plot], color='cornflowerblue', linewidth=lw,label='Lasso')
plt.plot(coef_multi_task_lasso_[:, feature_to_plot], color='gold', linewidth=lw,label='MultiTaskLasso')
plt.legend(loc='upper center')
plt.axis('tight')
plt.ylim([-1.1, 1.1])
plt.show()

这里写图片描述


http://chatgpt.dhexx.cn/article/aNTNwhx8.shtml

相关文章

【数据挖掘】Lasso回归原理讲解及实战应用(超详细 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~ Lasso回归 岭回归无法剔除变量,而Lasso(Least Absolute Shrinkage and Selection Operator)回归模型,将惩罚项由L2范数变为L1范数,可以将一些不重要的回归系数缩减为0&…

Lasso回归系列四:Group Lasso,Sparse Group Lasso

Lasso变体:Group Lasso,Sparse Group Lasso 关于Lasso回归的讲解可以看我的另一篇博客:Lasso回归系列二:Lasso回归/岭回归的原理 Group Lasso 在Lasso回归中,是单独地看待每个特征(即假定特征不存在先验的分组)&…

Group Lasso

简介 Lasso(least absolute shrinkage and selection operator,又译最小绝对值收敛和选择算子、套索算法)是一种同时进行特征选择和正则化(数学)的回归分析方法,旨在增强统计模型的预测准确性和可解释性&a…

Lasso回归(Stata)

本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:清风数学建模:https://www.bilibili.com/video/BV1DW411s7wi 前言 一、lasso回归的应用 这里因为Stata里对岭回归有bug,所以就没有岭回归&#xff…

Lasso-Logistic回归-R语言应用详解

Lasso简介 LASSO(Least Absolute Shrinkage and Selection Operator)是线性回归的一种缩减方式,通过引入 L 1 L_1 L1​惩罚项,实现变量选择和参数估计。 ∑ i 1 N ( y i − β 0 ∑ j 1 p x i j β j ) 2 λ ∑ j 1 p ∣ β j ∣ \sum_{i1}^{N}\le…

Lasso问题

转自:http://blog.csdn.net/slade_sha/article/details/53164905 先看一波过拟合: 图中,红色的线存在明显的过拟合,绿色的线才是合理的拟合曲线,为了避免过拟合,我们可以引入正则化。 下面可以利用正则化来…

Lasso Regression

Lasso Regression 标签(空格分隔): 监督学习 在数据挖掘和机器学习算法的模型建立之初,为了尽量的减少因缺少重要变量而出现的模型偏差问题,我们通常会尽可能的多的选择自变量。但是在实际建模的过程中,通…

logistic回归、lasso回归、ridge回归、Elastic Net回归之间的总结

1. 概念 一直看一遍忘一遍,实在懒得再查了,理解后再次整理,希望能加深理解。 先总结几个概念: 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器&#xff…

机器学习--岭回归和Lasso回归

任何数据都存在噪声和多重共线性 如何解决多重共线性 ? 1.算法角度(正则化) 2.数据角度(最有效果) 岭回归与Lasso回归的出现是为了解决线性回归出现的过拟合(数据间高度线性相关)以及在通过正规…

LASSO和LARS

1、LASSO简介 LASSO是一种经典的松弛算法,其全称是The Least Absolute Shrinkage and Selectionator operator,于1996年由Tibshirani提出来。lasso的一个根本思想就是利用L1范式来诱导稀疏解,下面给出lasso的两种形式以及其等价性证明&#x…

R语言实现LASSO回归

Lasso回归又称为套索回归,是Robert Tibshirani于1996年提出的一种新的变量选择技术。Lasso是一种收缩估计方法,其基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归…

python-LASSO回归模型

https://zhuanlan.zhihu.com/p/76055830 LASSO回归模型的应用 ①可视化方法确定值 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib from sklearn import model_selection from sklearn.linear_model import Lasso, LassoCV font…

Lasso模型

Lasso是一种数据降维方法,该方法不仅适用于线性情况,也适用于非线性情况。Lasso是基于惩罚方法对样本数据进行变量选择,通过对原本的系数进行压缩,将原本很小的系数直接压缩至0,从而将这部分系数所对应的变量视为非显著…

Lasso算法理论介绍

先看一波过拟合: 图中,红色的线存在明显的过拟合,绿色的线才是合理的拟合曲线,为了避免过拟合,我们可以引入正则化。 下面可以利用正则化来解决曲线拟合过程中的过拟合发生,存在均方根误差也叫标准误差&…

Lasso回归系列二:Lasso回归/岭回归的原理

Lasso回归/岭回归的原理 在学习L1,L2正则化的作用和区别时,我们总是会看到这样的一副图片: 这幅图片形象化地解释了L1,L2对线性模型产生的不同的约束效果。 我最开始其实是不太理解为什么要这么画的。比如 1、L1范数(L1-norm)等…

回归问题-Lasso回归

Lasso(Least absolute shrinkage and selection operator)方法是以缩小变量集(降阶)为思想的压缩估计方法。它通过构造一个惩罚函数,可以将变量的系数进行压缩并使某些回归系数变为0,进而达到变量选择的目的。 正则化 正则化&am…

Lasso回归

维数灾难 高维数据 何谓高维数据?高维数据指数据的维度很高,甚至远大于样本量的个数。高维数据的明显的表现是:在空间中数据是非常稀疏的,与空间的维数相比样本量总是显得非常少。 在分析高维数据过程中碰到最大的问题就是维数…

1.1.3. Lasso(套索回归)

1.1.3. Lasso 一、简介 首先,Lasso同样是线性回归的一种变体。而文档中指出,它是一种能让参数 ω \omega ω稀疏的模型(作用)。它是压缩感知领域的基础(地位),在特定情况下,它可以“…

【机器学习】Lasso模型

一、引言 1.1 高维数据 何谓高维数据?高维数据指数据的维度很高,甚至远大于样本量的个数。高维数据的明显的表现是:在空间中数据是非常稀疏的,与空间的维数相比样本量总是显得非常少。 在分析高维数据过程中碰到最大的问题就是维…

多元线性回归-Lasso

目录 1.Lasso与多重共线性 2. Lasso的核心作用:特征选择 3. 选取最佳的正则化参数取值 1.Lasso与多重共线性 Lasso全称最小绝对收缩和选择算子(Least absolute shrinkage and selection operator),由于这个名称过于复杂所以简称为Lasso,和…