机器学习-一篇入门

【模型】一篇入门之-Lasso回归模型

作者 : 老饼 发表日期 : 2023-03-25 00:18:18 更新日期 : 2024-11-20 11:58:43
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



Lasso回归全称为Least absolute shrinkage and selection operator,是一种可用于筛选变量的模型

本文讲解Lasso回归的模型表达式、损失函数以及Lasso回归的原理与意义,并展示一个Lasso回归的实现例子

通过本文,可以快速了解Lasso回归是什么,模型的原理是什么,以及如何使用Lasso回归来进行筛选变量





    01. 什么是Lasso回归   




本节讲解Lasso回归模型是什么,包括Lasso回归的表达式、损失函数与求解方法等





    Lasso回归模型是什么    


Lasso回归模型简单来说,就是在线性回归模型的基础上,加入一范正则项
虽然Lasso回归是一个回归模型,但由于它具有系数稀疏化的特点,因此也常用于筛选变量
 Lasso的模型表达式如下:
 
   
  Lasso回归的损失函数如下:
   
 其中,:样本个数             
 
:系数个数       
 
:y的预测值      
 
:y的真实值      
                   
:惩罚系数,用于调节系数W的惩罚力度





       Lasso回归模型的阈值       


与岭回归模型一样,原始的Lasso回归模型是不带阈值的
 因为Lasso回归的目的是对各个w进行惩罚,而阈值b是不需要惩罚的
因此,Lasso回归一般先对数据进行中心化,再进行建模,再反求出阈值,如下:
(1) 先将数据作中心化转换:                                                                             
                                                                
                                                              
 此时, 都是以(0,0)为中心的数据                   
(2) 用训练Lasso回归模型, 得到                                      
(3) 训练后再计算阈值b:                       
即可得到            








       02. Lasso回归的训练与稀疏化       




本节讲解Lasso回归是如何训练的,以及Lasso回归为什么可以得到稀疏化系数




        Lasso回归的模型训练      


由于Lasso以L1范数作为正则项,无法得到公式解,一般用坐标下降法进行求解
坐标下降法每次都保持其它参数不变,只将其中一个参数调整到最优解(即驻点)
以上述方式进行反复迭代,直到参数的变化很小或达到最大迭代次数则终止训练
 Lasso的求解流程如下:
 

1. 初始化解全为 0                                                                                   
2. 循环迭代, 每次将一个w调整为最优w(可按顺序选择w,也可随机)             
 最优w的求法:求损失函数对该w的导数,令导为0,即可求得最优w      
3. 直到满足终止训练条件,退出迭代                                                        
 终止条件为:(1)达到最大迭代次数,(2)w的变化率极微小                    






      Lasso回归模型的意义-系数稀疏化     


Lasso是对线性回归、岭回归的改进,它令系数正则化的同时,尽量使系数稀疏化
 Lasso回归与系数稀疏化
在变量多重共线性的时候,我们往往希望模型在足够有效的前提下,能够使用越少的变量越好 
 例如,当时,我们希望得到的模型表达式为 ,而不是  
这种能令部分系数为0的效果,就被称为系数稀疏化,它可以起到简化模型或者筛选变量的作用
为什么Lasso回归容易让系数稀疏化
 岭回归虽然能够抑制系数过大,但它很难得到稀疏系数,而Lasso回归却比较容易得到稀疏系数
 非严谨解释如下:
不妨把损失函数中的误差项记为 ,正则项记为 ,则此时损失函数简记为 
可证明,损失函数 的最优解必定在 的等高线与 的等高线的切点处取得(这里省略证明)
  
以二维为例,岭回归的正则项是一个圆,要与相切于坐标轴是很难的
反观Lasso的正则项 ,它是一个棱形,要与相切于坐标轴却很容易
因此,岭回归很难得到稀疏系数,而相比之下,LASSO回归更易得到稀疏系数
 正因为LASSO回归容易得到稀疏系数,因此也可作为筛选变量的一种技术
在建模之前,可以先用Lasso回归检测哪些变量的系数为0,然后把系数为0的变量去掉再进行建模








    03. 如何实现一个Lasso回归模型      





本节展示如何实现一个Lasso回归模型,并展示如何利用Lasso排除冗余变量





    Lasso回归代码实现    


在sklearn中要实现Lasso回归,只需调用linear_model.Lasso就可以
 具体代码如下:
"""
LASSO 回归
"""
from sklearn.linear_model import Lasso
import numpy as np

# ======生成数据=========
x1 =  np.arange(0,100)                                              # 生成x1
x2 = x1*4+3                                                         # 生成x2,这里的x2与x1是线性相关的
x = np.concatenate((x1.reshape(-1, 1),x2.reshape(-1, 1)),axis=1)    # 将x1,x2合并作为x
y = x.dot([2,3])                                                    # 生成y

# =====Lasso模型训练========
alpha =0.3                                                           # 设置正则项系数alpha
mdl = Lasso(alpha=alpha,fit_intercept=True,tol=1e-4,max_iter=1000)   # 初始化Lasso回归模型
mdl.fit(x,y)                                                         # 用数据训练模型
sim_y= mdl.predict(x)                                                # 预测

# ================= 打印结果 =======================
print('\n======Lasso训练结果==================')
print('权重:'+str(mdl.coef_))
print('截距:'+ str(mdl.intercept_))
print( '均方误差:'+str(((y-sim_y)*(y-sim_y)).sum()))
print( '损失函数loss值:'+str(((y-sim_y)*(y-sim_y)).sum()/(2*x.shape[0])+alpha*(abs(mdl.coef_.sum()))))
print('迭代次数:'+str(mdl.n_iter_))
运行结果如下:
  
代入模型表达式,可得到模型为:
 
可以看到,第二个变量的系数已接近于0,说明第二个变量在模型中是可去除的
这就是Lasso回归的好处,在X1,X2线性相关时,其中一个变量的系数会趋于0
    如何自实现Lasso回归    
 
 如果想自实现Lasso回归,而不是调用函数,可参考课程《Lasso回归-原理与自实现
课程详细介绍了sklearn内部如何实现Lasso回归的,并复现一模一样的效果







好了,以上就是Lasso回归模型的介绍与使用方法了~









 End 





联系老饼