Lasso回归

Lasso是可以估计稀疏系数的线性模型,尤其适用于减少给定解决方案依赖的特征数量的场合。如果数据的特征过多,而其中只有一小部分是真正重要的,此时选择Lasso比较合适。在数学表达上,Lasso类似于岭回归,也是在代价函数基础上增加了一个惩罚项的线性模型。

主参数设置

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。这里归一化有两个好处:(1):提升模型的收敛速度,减少寻找最优解的时间。(2)提升模型的精度

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 大的情况下。可以是"cyclic"或"random"。它指定了当每轮迭代的时候,选择权重向量的哪个分量来更新。
(1)“random”:更新的时候,随机选择权重向量的一个分量来更新。
(2)“cyclic”:更新的时候,从前向后依次选择权重向量的一个分量来更新。

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

Lasso回归基本操作

%config InteractiveShell.ast_node_interactivity = 'all'   #同时输出多行结果
from sklearn.linear_model import Lasso
X = [[3], [8]]
y = [1, 2]
reg = Lasso(alpha=3.0)            # 惩罚项系数为3.0
reg.fit(X, y)                     # 拟合
Lasso(alpha=3.0, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)
reg.coef_                         # 查看系数
reg.intercept_                    # 查看截距
reg.predict([[6]])
Lasso(alpha=3.0, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)Lasso(alpha=3.0, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)
array([0.])
1.5
array([1.5])
reg = Lasso(alpha=0.2)  #调整系数
reg.fit(X, y)
Lasso(alpha=0.2, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)
reg.coef_
reg.intercept_
reg.predict([[6]])
Lasso(alpha=0.2, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)
Lasso(alpha=0.2, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)
array([0.168])
0.576
array([1.584])

Lasso回归例子

#采用lasso CV和lassoLarsCV可实现最佳参数选择
#案例 研究两变量之间的关系,采用lasso回归
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矩阵
dataj = np.array(data)
X = dataj[:,0:1]   # 变量x
y = dataj[:,1]   #变量y# ========Lasso回归========
model = Lasso(alpha=0.01)  # 调节alpha可以实现对拟合的程度
model.fit(X, y)   # 线性回归建模
print('系数矩阵:\n',model.coef_)
print('线性回归模型:\n',model)
# 使用模型预测
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()
Lasso(alpha=0.01, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)
系数矩阵:[1.52826579]
线性回归模型:Lasso(alpha=0.01, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)<matplotlib.collections.PathCollection at 0x14227d39a58>
[<matplotlib.lines.Line2D at 0x14224ab2e80>]
Text(0.5,0,'x')
Text(0,0.5,'y')
<Figure size 640x480 with 1 Axes>

LassoCV回归(可实现最佳参数选择)

# ========Lasso回归========
#使用lassoCV选择最佳a
model = LassoCV()  # LassoCV自动调节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()
LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False,precompute='auto', random_state=None, selection='cyclic', tol=0.0001,verbose=False)
系数矩阵:[1.60985981]
线性回归模型:LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False,precompute='auto', random_state=None, selection='cyclic', tol=0.0001,verbose=False)
最佳的alpha: 0.002090576613302052<matplotlib.collections.PathCollection at 0x14227e1d0f0>
[<matplotlib.lines.Line2D at 0x14227df2400>]
Text(0.5,0,'x')
Text(0,0.5,'y')

LassoLarsCV回归(可实现最佳参数选择)

# ========Lasso回归========
#使用lassoLarsCV选择最佳amodel = 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()
LassoLarsCV(copy_X=True, cv=None, eps=2.220446049250313e-16,fit_intercept=True, max_iter=500, max_n_alphas=1000, n_jobs=1,normalize=True, positive=False, precompute='auto', verbose=False)系数矩阵:[1.6314263]
线性回归模型:LassoLarsCV(copy_X=True, cv=None, eps=2.220446049250313e-16,fit_intercept=True, max_iter=500, max_n_alphas=1000, n_jobs=1,normalize=True, positive=False, precompute='auto', verbose=False)
最佳的alpha: 0.0<matplotlib.collections.PathCollection at 0x14228339518>
[<matplotlib.lines.Line2D at 0x14227e58a58>]
Text(0.5,0,'x')
Text(0,0.5,'y')

线性回归(四)---Lasso回归相关推荐

  1. 线性回归、Lasso回归、岭回归预测北京PM2.5浓度

    一.项目背景 北京PM2.5浓度回归分析训练赛 1.数据   数据主要包括2010年1月1日至2014年12月31日间北京pm2.5指数以及相关天气指数数据.   数据分为训练数据和测试数据,分别保存 ...

  2. 线性回归、lasso回归、岭回归以及弹性网络的系统解释

    线性回归.lasso回归.岭回归以及弹性网络的系统解释 声明 背景介绍 概述 线性回归模型函数及损失函数 线性回归算法 多项式回归(线性回归的推广) 广义线性回归(线性回归的推广) 岭回归(Ridge ...

  3. lasso回归_线性回归amp;lasso回归amp;岭回归介绍与对比

    1. 回顾最小二乘法 详细的解释在以下这个链接 https://www.matongxue.com/madocs/818 简而言之,最小二乘法展现了平方误差值最小的时候,就是最好的拟合回归线. 2. ...

  4. 基于身高与体重数据集与Auto数据集分别进行线性回归和Lasso回归(代码逐行讲解,超细节)

    身高体重 #还是先导入要用的包,没下载的要先去下载依赖包 import pandas as pd import statsmodels.api as sm from plotly.offline im ...

  5. 线性回归——lasso回归和岭回归(ridge regression)

    目录 线性回归--最小二乘 Lasso回归和岭回归 为什么 lasso 更容易使部分权重变为 0 而 ridge 不行? References 线性回归很简单,用线性函数拟合数据,用 mean squ ...

  6. 【机器学习之线性回归】多元线性回归模型的搭建+Lasso回归的特征提取

    文章目录 前言 一.多元线性回归 1.原理介绍 2.sklearn代码实现 二.Lasso回归 1.原理介绍 2.sklearn代码实现 三.总结 前言 回归是监督学习的一个重要问题,回归用于预测输入 ...

  7. 基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比(生信数基实验作业)

    基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比 0 引言 全基因组选择是 21 世纪动植物育种的一种重要的选择策略,其核心就是全基因组预测,即基于分布在整个基因组上的多样性分 ...

  8. Lasso回归理论及代码实现

    Lasso回归的模型可以写作 与一般线性回归相比, Lasso回归加入了回归项系数的一范数, 其中 , 这样做是为了防止线性回归过程发生的过拟合现象. 直观点看, 其将的分量限制在了一个以圆点为中心以 ...

  9. 学习机器学习四 回归模型——线性回归、L1正则化(Lasso回归)、L2正则化(ridge回归)

    还记得什么是回归吗?回忆下回归就是连续的输出,分类是离散的. 回归模型一般分为:①线性回归--就是线性方程,类似为一元一次方程(y=wx+b),比如你的年龄: ②逻辑回归(类似为曲线方程) 线性回归 ...

最新文章

  1. 赠书:Java面试一战到底!
  2. 实现java多线程的3种方式,99%人没用过第3种
  3. react(97)--分支切换
  4. Windows 下音频数据采集和播放
  5. 重写RadGrid及其注意事项
  6. 网络虚拟化基础一:linux名称空间Namespaces
  7. Linux虚拟文件系统:数据结构与文件系统注册、文件打开读写
  8. 朋友很喜欢打篮球,我用Python爬取了1000张他喜欢的NBA球星图片送给他【内附源码】
  9. linux主从库配置文件,Linux系统中MongoDB安装及主从配置linux操作系统 -电脑资料
  10. 灰狼优化算法与影响力最大化问题
  11. bboss v5.5.3 发布,Elasticsearch Rest Client
  12. 电磁仿真原理——4. 矩量法(Moment Methods)
  13. 【波束形成】MMSE波束形成,自适应MMSE波束形成以及自适应MBER波束形成
  14. STL与Boost对比
  15. 服务器型号惠普RX3600,AB463-60001 AD296A IO板backplane背板HP小型机RX3600 RX6600
  16. 密码学、信息安全、信息隐藏(论文)
  17. directive 自定义指令
  18. 2019元旦消费大数据
  19. 最牛ks短视频评论采集软件
  20. 批处理脚本之批量打开常用软件

热门文章

  1. js promises 踩坑 填坑 We have a problem with promises
  2. python实现动态壁纸_ubuntu下用python写了个生成动态壁纸的脚本,如果通过代码实现使用这个xml,而不是通过桌面...
  3. 学生信息管理系统(免费)
  4. 韦老师7天物联网课程---day6
  5. 莺莺落难凤凰不如鸡,张生无意巧识美人儿——新说莺莺传之一
  6. oracle中 990.90,麒麟990+90Hz屏是什么样的体验?旗舰手机游戏性能实测
  7. 密码学——维吉尼亚密码
  8. 【html_table基础】使用colgroup col 设置列共同样式
  9. multiple commands produce
  10. Cannot find module ‘../views/HomeView.vue‘ or its corresponding type declarations.ts