文章目录
简介
Lasso Regression也叫Ridge Regression(岭回归),其实这两个都是线性回归模型的变种。
当线性回归加L1正则就是Lasso Regression,当线性回归加L2正则就是Ridge Regression。
Why We Prefer Sparsity
·如果维度太高,计算量也变得很高,尤其是在特征维度D>样本个数N的时候,特别需要Lasso来去掉多余特征,否则容易出现过拟合现象。
·在稀疏性条件下,计算量只依赖非0项的个数
·提高可解释性,当参数很多的时候,无法看出哪些参数对目标函数有帮助。
Sparsity例子:Housing Price Application
*Lot size
*Single Family
*Year built
*Last sold price
Last sale price/sqft
*Finished sqft
*Unfinished sqft
Finished basement sqft
*#floors
*Flooring types
Parking type
Parking amount
Cooling
*Heating
Exterior materials
Roof type
Structure stylex
Dishwasher
Garbage disposal
Microwave
Range /Oven
Refrigerator
Washer
Dryer
Laundry location
Heating type
Jetted Tub
Deck
Fenced Yard
Lawn
Garden
Sprinkler System
以上这么多预测房价的特征中,其中星号表示比较重要的特征,那如何选取这些重要的特征?下面来分别看看。
确定特征的方法
Option1:Exhaustive Search:“all subsets”
假如我有一个特征集合
由于不知道哪个特征好,用简单粗暴的方式来排列组合特征,然后看谁的准确率(acc)高
这些个特征的组合我们给个名字叫:Power set。可以看到Power set的大小是
,n为特征的个数。明显,特征个数超过10个就太复杂了。
Option2:Greedy Approaches
假如我有一个特征集合
,5个特征
定义一个best_feature_set集合,并初始化为空
·Forward Stepwise
开始循环,第一个循环:
把找到的最好第二个特征
放入best_feature_set中
开始第二次循环,在A-best_feature_set中来循环:
这里找出来的
具有最高的准确率,这里
要比单个的
的准确度要高才行,不然就停止循环了。
以此类推。。。直到准确率没有新的最大值停止循环。
·Backward Stepwise
和上面的算法一样,只不过开始的best_feature_set集合初始化为A,然后依次去掉特征,每次选择产生准确最高那组的特征。
例如上图中去掉
,准确率最高,说明
不行,要去掉。
然后在循环,这个时候去掉
。
当新一轮循环的最大准确率比上一轮的低,就停止循环。
Option3:via Regularization-A Principled Way(正则的方法)
这种方法不像前面的方式通过枚举的方式来选取特征,而是通过一个目标函数构建特征组合
开始之前,先看这个:
Ridge regression:L2 regularized regression
假设有样本:
,则线性回归的损失函数为:
上面是矩阵的形式(X是矩阵,其他两个是向量),第一项写成最小二乘的形式是:
以上线性回归加上L2的正则项就是岭回归。加了L2的正则项可以避免w很大
Lasso regression:L1 regularized regression
假设有样本:
,则线性回归的损失函数为:
上面是矩阵的形式(X是矩阵,其他两个是向量),第一项写成最小二乘的形式是:
上面是矩阵的形式,第一项写成最小二乘的形式是:
如果我们对这个损失函数求偏导,先关注最后的正则项:
对w的梯度是多少。
当
为正数和负数分别结果是正负1,当其等于0的时候,这个时候有很多个解,图像上看:
这种需要分情况讨论的梯度下降称为sub-gradient descent.
但是,对于Lasso,有另外一种优化算法:
Coordinate Descent
Goal:minimize some function g
我的函数g有很多个维度,但是我每次寻求的最好的解是在某一个维度上的,这个时候可以把其他维度当作常数。
算法描述如下:
在t=1时刻,我们选定某一维度
,其他的看做是常数,那么
求解最佳的
:
在t=2时刻,我们选定某一维度
,其他的看做是常数,那么
求解最佳的
:
一直循环,直到函数收敛,循环过程中,w的选择可以按顺序,也可以随机选。
Coordinate Descent的特点
1、不需要设定step-size!
2、对于lasso objective,它会收敛。
Coordinate Descent for Lasso
把Lasso的损失函数抄下来
写出加了log后的Lasso的损失函数,连乘变连加(这里有点没看懂):
其中
代表第i个样本的第j个特征。
然后求损失函数L对某个特征
的偏导:
这里注意第二步那里是从求和里面把包含
那项单独拉出来了。
最后那里
必然大于0的(样本不可能都为0),整理一下就是下面这个样子
由于最后一项有绝对值,所以我们分三种情况讨论:
然后设置偏导等于0来求极值。也分上面三种情况进行讨论。
先看
的情况,这里用到了上面
的结论
在看
的情况
在看
的情况
最后的结果整理如下:
从上面可以看到当特征更新为0的条件是什么,这也是Lasso加L1正则会出现稀疏特征的原因。
后记
其他解决Lasso的算法:
Classically: Least angle regression(LARS)[ Efron et al.'04]
Then: Coordinate descent algorithm [ Fu '98, Friedman, Hastie,& Tibshirani’08]
Now: Parallel CD(e.g., Shotgun,[ Bradley et al.'11])
Other parallel learning approaches for linear models:
-Parallel stochastic gradient descent(SGD)(e.g, Hogwild![ Niu et al.'11])
-Parallel independent solutions then averaging [ Zhang et al.'12]
Alternating directions method of multipliers(ADMM)[ Boyd et al.'11]