机器学习之 scikit-learn 开发入门 -
监督学习 - Lasso 回归介绍
一、概要本文主要讲解 Lasso 回归的实践与原理,主要内容包括:
Lasso 回归的介绍Lasso 回归算法类库介绍Lasso 回归应用示例Lasso 回归的原理总结通过文字的介绍,希望大家可以掌握 Lasso 回归的使用,了解 Lasso 回归的原理。
二、Lasso 回归的介绍上一篇介绍了 L2 正则化方案,Lasso 属于 L1 正则化方案,它对于资料要求低,所以应用比较广;除此之外,Lasso 还能对变数进行筛选和降低模型的复杂程度。它会通过一系列引数控制模型的复杂度,从而避免过度拟合。
三、scikit-learn Lasso 回归算法类库介绍scikit-learn 逻辑回归算法类库对应的是 Lasso。下面就对 Lasso 的重要引数做一个总结。
引数名称引数型别引数预设值说明alphafloat1.0当 alpha 为 0 时算法等同于普通最小二乘法max_iterint1000最大循环次数warm_startboolFalse为 True 时, 重复使用上一次学习作为初始化,否则直接清除上次方案
四、Lasso 回归应用示例4.1 汇入标头档案#coding=utf-8
import
pandas
as
pd
from
sklearn
.
cross_validation
import
train_test_split
from
sklearn
.
linear_model
import
Lasso
,
LassoCV
from
sklearn
import
metrics
import
numpy
as
np
import
matplotlib
.
pyplot
as
plt
4.2 样本资料data
=
pd
.
read_csv
(
‘D:\hua.cao\python\20180606\Folds5x2_pp.csv‘
)
X
=
data
[[
‘AT‘
,
‘V‘
,
‘AP‘
,
‘RH‘
]]
Y
=
data
[[
‘PE‘
]]
X_TRAIN
,
X_TEST
,
Y_TRAIN
,
Y_TEST
=
train_test_split
(
X
,
Y
,
random_state
=
1
)
4.3 训练模型lasso
=
Lasso
(
alpha
=
0.01
)
lasso
.
fit
(
X_TRAIN
,
Y_TRAIN
)
4.4 预测验证Y_PRED
=
lasso
.
predict
(
X_TEST
)
4.5 训练得到的 Lasso 模型print
lasso
.
coef_
lasso
.
intercept_
[[-1.96862642 -0.23930532 0.05685793 -0.15860993]] [460.04983649]
可知 Lasso 模型为:
PE = -1.96872703 * AT + -0.23925451 * V + 0.05655576 * AP + -0.15856511 * RH + 460.35193481
4.6 交叉验证X1
=
data
[[
‘AT‘
,
‘V‘
,
‘AP‘
,
‘RH‘
]]
Y1
=
data
[[
‘PE‘
]]
lassocv
=
LassoCV
()
lassocv
.
fit
(
X1
,
Y1
)
//获得最优alpha的值
lassocv
.
alpha_
//获得每个维度上的权重值
lassocv
.
coef_
//获得权重值不为零的维度个数
np
.
sum
(
lassocv
.
coef_
!=
0
)
4.7 画出预测值与真实值的线形图fig
,
ax
=
plt
.
subplots
()
ax
.
scatter
(
Y_TEST
,
Y_PRED
)
ax
.
plot
([
Y_TEST
.
min
(),
Y_TEST
.
max
()],
[
Y_TEST
.
min
(),
Y_TEST
.
max
()],
‘k--‘
,
lw
=
4
)
ax
.
set_xlabel
(
‘Measured‘
)
ax
.
set_ylabel
(
‘Predicted‘
)
plt
.
show
()

五、Lasso 回归的原理首先我们回顾下线性回归的标准方程:

我们需要求得 w 和 b 的值。线上性回归中我们利用最小二乘法求得 w 和 b,但是最小二乘法没有对特征的罚分机制,很容易过拟合,所以 Lasso 线上性回归的基础上修改了损失函式,加入了正则化项。

其中 n 为样本个数,α 为常数系数,需要进行调优。||θ||1 为 L1 范数。这里的 α 近似于应用示例中的 alpha。 在这里 sklearn 使用了座标轴下降法求损失函式的极值。座标轴下降法的数学依据是:一个可微的凸函式 J(θ),其中 θ 是 nx1 的向量,即有 n 个维度。如果在某一点 i,使得 J(θ) 在每一个座标轴上都是最小值,那么 J(i) 就是一个全域性的最小值。于是我们的优化目标就是在 θ 的 n 个座标轴上对损失函式做迭代的下降,当所有的座标轴上的 θi(i = 1,2,...n) 都达到收敛时,我们的损失函式最小,此时的 θ 即为我们要求的结果。
算法流程如下:
1. 首先,我们把 θ 向量随机取一个初值。记为 θ(0),括号里面的数字代表我们迭代的轮数,当前初始轮数为 0。
2. 对于第 k 轮的迭代。我们从 θ1(k) 开始,到 θn(k) 为止,依次求得 θi(k)。 θi(k) 的表示式如下:

3. 检查 θ(k) 向量和 θ(k−1) 向量在各个维度上的变化情况,如果在所有维度上变化都足够小,那么 θ(k) 即为最终结果,否则转入 2,继续第 k+1 轮的迭代。
六、总结
Lasso 回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为 0。增强模型的泛化能力。为什么会变为 0 可以参考机器学习中的范数规则化之(一)L0、L1 与 L2 范数:
https://blog.csdn.net/zouxy09/article/details/24971995
岭回归与 Lasso 回归最大的区别在于岭回归引入的是 L2 范数惩罚项,Lasso 回归引入的是 L1 范数惩罚项,Lasso 回归能够使得损失函式中的许多 θ 均变成 0,这点要优于岭回归,因为岭回归是要所有的 θ 均存在的,这样计算量 Lasso 回归将远远小于岭回归。
因此 Lasso 是压缩感测领域的基础(参见压缩感知 http://scikit-learn.org/stable/auto_examples/applications/plot_tomography_l1_reconstruction.html#sphx-glr-auto-examples-applications-plot-tomography-l1-reconstruction-py)。





























