老饼讲解:一步一步上手学习
套索回归(Lasso Regression)也是一种线性模型,只是它在线性回归的基础上,加入了一范正则项,从而可以更容易获得稀疏解,因此常用于筛选变量,但也由于它加入了一范正则项,因此需要用坐标下降法来进行训练。下面我们就来详细看看Lasso回归的模型原理,包括模型表达式、损失函数、求解方法,以及代码实现例子。
Lasso回归模型其实就是一个线性模型,如下:
它的模型其实和线性回归没什么区别,真正的区别在于损失函数,Lasso回归的损失函数如下:
其中,:样本个数
:系数个数
:y的预测值
:y的真实值
:惩罚系数,用于调节系数W的惩罚力度
好家伙,它其实就是在损失函数中,加入了正则项,由于绝对值是"一范数",所以也称为一范正则项。

那这个正则项有什么用呢,它其实就是用来防止系数过大,因为系数越大,就会令整体损失值越大,因此,在损失函数中加入它,就可以使得最终求解出来的结果更偏向于更小的系数。
我们知道,线性回归模型是使用最小二乘法来求解就可以了,但是,Lasso回归在损失函数中加入一范正则项后,就不能再用最小二乘法啦,一般改用坐标下降法来进行求解。
坐标下降法是个什么东西呢?其实就是每次都把单个参数(也就是模型中的单个w或b)迭代到最佳位置,各个参数轮流迭代到最佳位置,就称为一轮迭代,然后经过多轮迭代,直到参数的变化很小或达到最大迭代次数则终止训练。
Lasso回归的具体训练流程如下:

如图所示,
1. 先把解全初始化为 0。
2. 然后循环迭代,每次将一个参数调整为最优(也就是驻点)
3. 直到满足终止训练条件,退出迭代
终止条件为:(1)达到最大迭代次数,(2)w的变化率极微小
好了,我们知道,它每次都把参数调整到最优,那么这个最优点就是驻点,也就是偏导为0的地方,这只需要求一下偏导,然后再计算出驻点就可以了,这里我们就不展开推导了,公式看多了头又晕。
Lasso回归嘛,就是在损失函数中加入一范,用来惩罚过大的系数,所以最开始的时候,我以为就是线性回归系数过大时,就改用Lasso回归来训练,但后来发现,Lasso回归不只这一个用途,更多时候是利用它的稀疏化特性,来选择变量。
Lasso回归的稀疏化,是指它很容易让某些变量的系数为0,如下:

由于Lasso回归加入了一范正则项,它的就相当于在"系数绝对值之和"与"均方差"之间进行权衡,如图所示,如果一范正则项在几何上就是菱形,均方差相当于椭圆,两者的交点,一般就在菱角上,所以某些系数就会为0。这里不是很严谨,大概就是这么一个意思。
总的来说,Lasso回归就是很容易让系数为0,所以用Lasso回归训练完后,如果有些变量的系数为0,说明它对预测并没有起来作用,那么就可以剔除掉这些变量。
特别地,岭回归虽然也加入了正则项,但它加入的是二范正则项,所以并没有Lasso回归这种稀疏化的特点。
好了,说了这么多,我们就正式来使用一下Lasso回归吧!
"""
本代码展示如何用sklearn实现Lasso回归
本代码来自《老饼讲解-机器学习》 www.bbblearn.com
"""
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
alpha = 0.3 # 设置正则项系数alpha
md = Lasso(alpha=0.3,fit_intercept=True,max_iter=1000) # 初始化Lasso回归模型
md.fit(x,y) # 用数据训练模型
sim_y= md.predict(x) # 预测
print('\n======Lasso训练结果=========') # 打印结果
print('权重 :'+ str(md.coef_)) # 打印权重
print('阈值 :'+ str(md.intercept_)) # 打印阈值
print( '均方误差 :'+ str(((y-sim_y)**2).sum())) # 打印均方误差
print('迭代次数:'+ str(md.n_iter_)) # 打印迭代次数可以看到,在代码中我们设置了fit_intercept=True,这样模型训练出来的Lasso回归模型就是带阈值的,如果设为false,就没有阈值。代码运行结果如下:

代入模型表达式,可得到模型为:
可以看到,第二个变量的系数已接近于0,说明第二个变量在模型中是可去除的。这就是Lasso回归的好处,在线性相关时,其中一个变量的系数会趋于0。
总的来说,Lasso回归模型就是在线性回归的基础上,加入一范正则项,来避免系数过大,而且在变量多重共线性时,它容易产生稀疏化的解,所以可以利用它来筛选变量,总结如下:
1. Lasso就是在线性回归的基础上,加入一范正则项
2. Lasso使用坐标下降法来训练模型
3. Lasso可以通过alpha系数来避免系数过大
4. Lasso容易产生稀疏解,可以用来筛选变量
好了,关于Lasso回归的核心内容就是这么多了,学习时注意把它和线性回归、岭回归来进行对比,就会深刻多了,三个模型虽然很像,但是却各有各的用处。
评论