APP下载

机器学习之 scikit-learn 开发入门(4)

消息来源:baojiabao.com 作者: 发布时间:2026-05-29

报价宝综合消息机器学习之 scikit-learn 开发入门(4)

机器学习之 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_

print

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的值

print

lassocv

.

alpha_

//获得每个维度上的权重值

print

lassocv

.

coef_

//获得权重值不为零的维度个数

print

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)。

2019-01-24 01:39:00

相关文章