Python手写Lasso回归算法

理论

Lasso回归在最小二乘法的基础上加上了一个 l 1 l_1 l1惩罚项

损失函数: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n ∣ θ j ∣ J(\theta)=\frac 1 {2m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda \sum_{j=1}^n|\theta_j| J(θ)=2m1i=1m(hθ(x(i))y(i))2+λj=1nθj

相比岭回归可以直接通过矩阵运算得到回归系数相比,LASSO的计算变得相对复杂。由于惩罚项中含有绝对值,此函数的导数是连续不光滑的,所以无法进行求导并使用梯度下降优化。

两种求解Lasso回归的方法:

  • 坐标下降法
  • 最小角回归

坐标下降法

坐标下降法,是沿着坐标轴的方向去下降。

坐标下降法的数学依据是:

         一个可微的凸函数 J ( θ ) J(\theta) J(θ),其中 θ \theta θ n ∗ 1 n*1 n1的向量,即有 n n n个维度。如果在某一点 θ ‾ \overline \theta θ,使得 J ( θ ) J(\theta) J(θ)在每一个坐标轴 θ ‾ i ( i = 1 , 2 , . . . , n ) \overline \theta_i(i=1,2,...,n) θi(i=1,2,...,n)上都是最小值,那么 J ( θ ‾ i ) J(\overline \theta_i) J(θi)就是一个全局最小值

于是,我们的优化目标是:在 θ \theta θ n n n个坐标轴上,对损失函数做迭代的下降,当所有的坐标轴上的 θ i ( i = 1 , 2 , . . . , n ) \theta_i(i=1,2,...,n) θi(i=1,2,...,n)都收敛,此时损失函数最小,此时的 θ \theta θ即为我们要求的结果。

具体算法流程

1、首先,初始化 θ \theta θ向量,随机取值即可,即为 θ ( 0 ) \theta^{(0)} θ(0),上面的括号里的数字表示当前迭代的轮数。

2、对于第 k k k轮的迭代,我们从 θ 1 ( k ) \theta_1^{(k)} θ1(k)开始,到 θ n ( k ) \theta_n^{(k)} θn(k)为止,依次求 θ i ( k ) \theta_i^{(k)} θi(k) θ i ( k ) \theta_i^{(k)} θi(k)的表达式如下:

θ i ( k ) ∈ a r g m i n ⏟ θ i J ( θ 1 ( k ) , θ 2 ( k ) , . . . θ i − 1 ( k ) , θ i , θ i + 1 ( k − 1 ) , . . . , θ n ( k − 1 ) ) \theta_i^{(k)} \in \underbrace{argmin}_{\theta_i} J(\theta_1^{(k)}, \theta_2^{(k)}, ... \theta_{i-1}^{(k)}, \theta_i, \theta_{i+1}^{(k-1)}, ..., \theta_n^{(k-1)}) θi(k)θi argminJ(θ1(k),θ2(k),...θi1(k),θi,θ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值