一 序
本文属于贪心NLP训练营学习笔记系列。上节学完逻辑回归之后,本节学习的是逻辑回归的变种。在整理lasso之前,我先整理了普通最小二乘推导
在使用最小二乘法进行求解时,我们会对线性回归模型进行假设,当这些假设在实际中并不满足时,最小二乘法是有问题的。其中很重要的一个假设是要求各个变量要相互独立,而实际样本可能会有较大的共线性(multicollinearity)。
老师之前在讲逻辑回归也讲过,为了解决过拟合的问题(吧噪声也引进来造成的),当线性回归加L1正则就是Lasso Regression,当线性回归加L2正则就是Ridge Regression。
二 lasso
关于lasso.如果你看懂了知乎上大佬的帖子:https://www.zhihu.com/question/38121173
太多的术语,背景知识了。因为看上去只是L2改成L1了,但实际上背后的工作原理相当复杂,需要慢慢理解。
Why We Prefer Sparsity
·如果维度太高,计算量也变得很高,(尤其是在特征维度D>样本个数N的时候,特别需要Lasso来去掉多余特征,否则容易出现过拟合现象。)
·在稀疏性条件下,计算量只依赖非0项的个数
·提高可解释性,(当参数很多的时候,无法看出哪些参数对目标函数有帮助。)
例子:房价的评估,红色表示比较重要的特征,那如何选取这些重要的特征?
三 确定特征的方法
3.1 排列组合
假如我有一个特征集合,
用简单粗暴的方式来排列组合特征,然后看谁的准确率(acc)高
这些个特征的组合我们给个名字叫:Power set。可以看到Power set的大小是,n= 特征的数量。
缺点:指数级复杂度,当n>10的等,计算量太大。
3.2 Greedy Approaches
假如我有一个特征集合,5个特征
定义一个best_feature_set集合,并初始化为空
·Forward Stepwise :前向
开始循环,第一个循环,假设我们找到最好特征是 放入best_feature_set中.
开始第二次循环,在{A-best_feature_set} :中来循环:
这里找出来的具有最高的准确率,这里要比单个的的准确度要高才行,不然就停止循环了。
以此类推,直到满足停止条件(加特征之后,准确率比之前最大非准确率小)。
贪心算法:局部最优解,不一定是全局最优解。
·Backward Stepwise 后向
和上面的算法相反,开始的best_feature_set集合初始化为A,然后依次去掉特征,每次选择产生准确最高那组的特征。
第一次循环,任意删除一个,看谁的准确率高,截图的例子是删掉,准确率最高.
后面的过程类似,当新一轮循环的最大准确率比上一轮的低,就停止循环。
3.3(正则的方法)
via Regularization-A Principled Way
前面的方式通过枚举的方式来选取特征,正则是通过一个目标函数构建特征组合。到底哪个效果好?老师说不一定。
Ridge regression:L2 regularized regression
假设有样本:,则线性回归的损失函数为:
前面是线性回归,后面是正则。式子是矩阵的形式(X是矩阵,其他两个是向量)
以上线性回归加上L2的正则项就是岭回归。加了L2的正则项可以避免w很大,但是不会变成0.
Lasso regression:L1 regularized regression
假设有样本:,则线性回归的损失函数为:
上面是矩阵的形式(X是矩阵,其他两个是向量),第一项写成最小二乘的形式是
之前逻辑回归,算过L2 的计算梯度求导。那么L1 求导,前面是一样的,我们关注下正则项
因为是w的绝对值,所以会有多种情况(正、负、0),所以L1 会比L2 复杂的多。
>0.梯度为1
<0,梯度为-1
=0,梯度不是唯一的,下面截图的很多绿线( 梯度是一个函数增长最快的方向,但是当函数在某点不可导时梯度就没法计算了)。
这种需要分情况讨论的梯度下降称为sub-gradient descent次梯度.
(采用次梯度下降法是可解的,参见大佬:https://blog.csdn.net/qq_32742009/article/details/81704139)
Coordinate Descent(LASSO Solver)
对于Lasso,还有另外一种优化算法:
函数g有很多个维度,但是我们每次寻求的最好的解是在某一个维度上的,这个时候可以把其他维度当作常数
在t=1时刻,我们选定某一维度,其他的看做是常数,那么
求解最佳的
同理,在t=2时刻,我们选定某一维度,其他的看做是常数,那么
求解最佳的
一直循环,直到函数收敛(或者达到一定阈值),循环过程中,w的选择方式:可以按顺序,也可以随机选。
Coordinate Descent的特点
1、不需要设定step-size!
2、对于lasso objective,它会收敛。
Coordinate Descent for Lasso
Lasso的损失函数推导过程,这里rss没看懂跟之前的形式不太一样。其中代表第i个样本的第j个特征。
然后求损失函数L对某个特征的偏导:注意式子第二步那里是从求和里面把包含那项单独拆出来。
最后那里
第一项看做常数项,第二项是,由于第三项有绝对值,所以我们分三种情况讨论:
最后的结论整理如下:
当特征更新为0的条件是之间,这也是Lasso加L1正则会出现稀疏特征的原因。
其他解决Lasso的算法:
Lasso 开辟了机器学习的新时代,有重要意义。