目录

  • Lasso线性回归学习笔记(公式与代码实现)
    • 1 为什么要在线性回归中引入正则化项(简介)
    • 2 常见正则化项
    • 3 损失函数图像与正则化之后的图像
      • 3.1损失函数图像
      • 3.2 加了 L~1~ 正则项之后的损失函数图像
    • 4 L~1~ 范数正则化的解中有更多零的原因
    • 5 Lasso 线性回归
    • 6 Lasso线性回归的优化算法(求最优解)
      • 6.1 梯度下降(Gradient Descent)
        • - 为什么梯度方向是函数上升最快方向?
        • - 向量的方向角和方向余弦
        • - 方向导数
        • -方向导数与梯度的关系
      • 6.2 近端梯度下降(Proximal Gradient Descent)
        • - 大致思想
        • - 推导过程
    • 7 代码实现

Lasso线性回归学习笔记(公式与代码实现)

1 为什么要在线性回归中引入正则化项(简介)

 (主要参考《机器学习》周志华 第三章)

首先,多元线性回归的基本形式为 f ( x ) = w T x + b f(\pmb{x})=\pmb{w}^T\pmb{x}+b f(xxx)=wwwTxxx+b,为便于讨论,把 w \pmb{w} www 和 b b b 吸收入向量形式 w ^ = ( w ; b ) \hat{\pmb{w}}=(\pmb{w};b) www^=(www;b),相应的,把数据集 D D D 表示为一个 m × ( d + 1 ) m\times(d+1) m×(d+1) 大小的矩阵 X \pmb{X} XXX (其中 m m m为样本条数, d d d为特征数),即
X = ( x 11 x 12 ⋯ x 1 d 1 x 21 x 22 ⋯ x 2 d 1 ⋮ ⋮ ⋱ ⋮ ⋮ x m 1 x m 2 ⋯ x m d 1 ) \pmb{X}=\left( \begin{matrix} x_{11} & x_{12} & \cdots &x_{1d} & 1 \\ x_{21} & x_{22} & \cdots &x_{2d} & 1 \\ \vdots & \vdots & \ddots &\vdots & \vdots \\ x_{m1} & x_{m2} & \cdots &x_{md} & 1 \\ \end{matrix} \right) XXX=⎝⎜⎜⎜⎛​x11​x21​⋮xm1​​x12​x22​⋮xm2​​⋯⋯⋱⋯​x1d​x2d​⋮xmd​​11⋮1​⎠⎟⎟⎟⎞​
再把标记也写成向量形式 y = ( y 1 ; y 2 ; ⋯ ; y m ) y=(y_1;y_2;\cdots;y_m) y=(y1​;y2​;⋯;ym​),
则根据最小二乘法,参数估计值 w ^ ∗ \hat{\pmb{w}}^* www^∗应该满足
w ^ ∗ = arg min ⁡ w ^ ( y − X w ^ ) T ( y − X w ^ ) \hat{\pmb{w}}^*= {\underset {\hat{w}}{\operatorname {arg\,min} }}(\pmb{y}-\pmb{X}\hat{\pmb{w}})^T(\pmb{y}-\pmb{X}\hat{\pmb{w}}) www^∗=w^argmin​(y​y​​y−XXXwww^)T(y​y​​y−XXXwww^)
令 E w ^ = ( y − X w ^ ) T ( y − X w ^ ) E_{\hat{w}}=(\pmb{y}-\pmb{X}\hat{\pmb{w}})^T(\pmb{y}-\pmb{X}\hat{\pmb{w}}) Ew^​=(y​y​​y−XXXwww^)T(y​y​​y−XXXwww^),对 w ^ \hat{\pmb{w}} www^求导得到(相关矩阵求导知识链接

∂ E w ^ ∂ w ^ = 2 X T ( X w ^ − y ) \frac{\partial E_{\hat{w}}}{\partial \hat w}=2\pmb X^T(\pmb X \hat{\pmb{w}}-\pmb y) ∂w^∂Ew^​​=2XXXT(XXXwww^−y​y​​y)

令上式得零则可得到 w ^ \hat{\pmb{w}} www^ 的最优解,有两种情况:

  • 情况一:当 X T X \pmb X^T \pmb X XXXTXXX 为满秩矩阵时,即可逆,令上式得零,可直接通过移项求的
    w ^ ∗ = ( X T X ) − 1 X T y \hat{\pmb{w}}^*=(\pmb X^T \pmb X)^{-1} \pmb X^T \pmb y www^∗=(XXXTXXX)−1XXXTy​y​​y
  • 情况二:然而现实任务中 X T X \pmb X^T \pmb X XXXTXXX 往往不是满秩矩阵,例如在高维数据中,变量的数目会超过样例数目,导致 X \pmb X XXX 的列数多于行数,而 X T X \pmb X^T \pmb X XXXTXXX 秩等于 X \pmb X XXX 的秩,显然 X T X \pmb X^T \pmb X XXXTXXX 不满秩,此时可解出多个 w ^ \hat{\pmb{w}} www^ (个人参考了《2022张宇线代9讲》P29 矩阵方程),它们都能使均方误差最小化,选择哪一个作为输出,常见的做法是引入正则化(regularization)项。

2 常见正则化项

首先介绍常见范数——P-范数 (范数详见百度百科),即
∣ ∣ x ∣ ∣ p = ( ∣ x 1 ∣ p + ∣ x 2 ∣ p + ⋯ + ∣ x n ∣ p ) 1 p ||\pmb x||_p=(|x_1|^p+|x_2|^p+\cdots+|x_n|^p)^{\frac{1}{p}} ∣∣xxx∣∣p​=(∣x1​∣p+∣x2​∣p+⋯+∣xn​∣p)p1​
L1范数正则化项,即令 p p p = 1,并针对参数向量,即为 λ ∣ ∣ w ∣ ∣ 1 \lambda ||\pmb w||_1 λ∣∣www∣∣1​ ,其中 λ \lambda λ 为正则化参数。对于 L1 正则化, λ \lambda λ 越大可以使越多的参数为零或接近零。

类似地,L2范数正则化项为 λ ∣ ∣ w ∣ ∣ 2 2 \lambda ||\pmb w||_2^2 λ∣∣www∣∣22​

3 损失函数图像与正则化之后的图像

(参考文章链接,下面是利用网站GeoGebra画出的函数图像)

3.1损失函数图像

为了可视化,假设一个回归函数及相应的损失函数如下:
回归函数: f ( x i ) = w 1 x i + b f(x_i)=w_1x_i+b f(xi​)=w1​xi​+b
损失函数(均方差): L = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 L=\frac{1}{m}\sum\limits_{i=1}^m(f(x_i)-y_i)^2 L=m1​i=1∑m​(f(xi​)−yi​)2其中m表示样本量,

为了保持简单,只取一个样本点(1,1)代入上面的代价函数方程中,即 L = ( w 1 + b − 1 ) 2 L=(w_1+b-1)^2 L=(w1​+b−1)2
以下则是上式的图像


可以看出,有无穷多个解可以使损失函数达到最小值。根据前面的论证,在只有一个样本点情况下,外加上最后一列是 1,得到的反应数据集 D D D 的矩阵 X \pmb{X} XXX是一行两列, X T X \pmb X^T \pmb X XXXTXXX 不是满秩矩阵,解不唯一,没毛病。

3.2 加了 L1 正则项之后的损失函数图像

加了 L1 正则项之后的损失函数: L = w 1 + b − 1 + ∣ w 1 ∣ L=w_1+b-1+|w_1| L=w1​+b−1+∣w1​∣ (令 λ = 1 \lambda=1 λ=1)
上式图像为

可以看出,有唯一最优解了

4 L1 范数正则化的解中有更多零的原因


(《机器学习》周志华 p253)

经典图片了,不多说了。

5 Lasso 线性回归

就是在损失函数中加入 L1正则化项的线性回归,值得注意的是在测试集中验证预测效果的时候的损失函数是不带正则化项的。

6 Lasso线性回归的优化算法(求最优解)

6.1 梯度下降(Gradient Descent)

- 为什么梯度方向是函数上升最快方向?

(参考:为什么梯度反方向是函数下降最快的方向?、《2022张宇高数18讲(第17讲)》)

首先介绍经典的梯度下降算法。
可能都知道,梯度下降算法的迭代公式是
w ^ k + 1 = w ^ k − η ∂ L ( w ^ k ) ∂ w ^ \hat{\pmb w}^{k+1}=\hat{\pmb w}^k- \eta \frac{\partial L(\hat{\pmb w}^k) } {\partial\hat{ \pmb w}} www^k+1=www^k−η∂www^∂L(www^k)​
其中 w ^ = ( w ; b ) \hat{\pmb{w}}=(\pmb{w};b) www^=(www;b),而
∂ L ( w ^ k ) ∂ w ^ \frac{\partial L(\hat{\pmb w}^k) }{\partial\hat{ \pmb w}} ∂www^∂L(www^k)​
便是优化目标中的损失函数 L ( w ^ ) L(\hat{\pmb{w}}) L(www^) 的梯度,接下来只要弄清为什么梯度方向是函数上升最快的方向,便就清楚这个式子了。

- 向量的方向角和方向余弦

(1)非零向量 a \pmb a aaa 与 x x x 轴、 y y y 轴、 z z z 轴正向的夹角 α \alpha α、 β \beta β、 γ \gamma γ 称为 a \pmb a aaa 的方向角。
(2) c o s α cos\alpha cosα、 c o s β cos\beta cosβ、 c o s γ cos\gamma cosγ 称为 a \pmb a aaa 的方向余弦,且 c o s α = a x ∣ a ∣ cos\alpha=\frac{a_x}{|a|} cosα=∣a∣ax​​、 c o s β = a y ∣ a ∣ cos\beta=\frac{a_y}{|a|} cosβ=∣a∣ay​​、 c o s γ = a z ∣ a ∣ cos\gamma=\frac{a_z}{|a|} cosγ=∣a∣az​​
(3)由(2)可知 a ∣ a ∣ = ( c o s α , c o s β , c o s γ ) \frac{a}{|a|}=(cos\alpha,cos\beta,cos\gamma) ∣a∣a​=(cosα,cosβ,cosγ) 称为向量 a \pmb a aaa 的单位向量
以上基础知识有利于从二元直接向更多元推广。

- 方向导数

要想解决以上疑问,首先要知道方向导数。在许多问题中,不仅要知道函数在坐标轴方向上的变化率(即偏导数),而且还要设法求得函数在某点沿着其他特定方向上的变化率。这就是方向倒数。

  • 首先给出明确定义:(此部分我感觉参考文章写的更好理解,以下定义更精确、好推广)
    设二元函数 u = u ( x , y ) u=u(x,y) u=u(x,y)在点 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0​(x0​,y0​) 有定义, l l l 为从 P 0 P_0 P0​ 出发的射线, P ( x , y ) P(x,y) P(x,y) 为在 l l l 上的任一点,则
    { x − x 0 = Δ x = t c o s α y − y 0 = Δ y = t c o s β \left\{ \begin{aligned} x -x_0 = \Delta x = t cos\alpha\\ y-y_0 = \Delta y = t cos\beta\\ \end{aligned} \right. {x−x0​=Δx=tcosαy−y0​=Δy=tcosβ​
    其中 t = ( Δ x ) 2 + ( Δ y ) 2 t=\sqrt{(\Delta x)^2+(\Delta y)^2} t=(Δx)2+(Δy)2 ​ 表示 P P P 与 P 0 P_0 P0​ 之间的距离。
    则极限
    l i m t → 0 + u ( P ) − u ( P 0 ) t = l i m t → 0 + u ( x 0 + t c o s α , y 0 + t c o s β ) − u ( x 0 , y 0 ) t \underset{t\rightarrow 0^+}{lim}\frac{u(P)-u(P_0)}{t} \\ =\underset{t\rightarrow 0^+}{lim}\frac{u(x_0+ t cos\alpha,y_0+ t cos\beta)-u(x_0,y_0)}{t} t→0+lim​tu(P)−u(P0​)​=t→0+lim​tu(x0​+tcosα,y0​+tcosβ)−u(x0​,y0​)​
    此极限便是函数 u u u 在点 P 0 P_0 P0​ 沿方向 l \pmb l lll 的方向导数,记作
    ∂ u ∂ l ∣ P 0 \frac{\partial u}{\partial \pmb l}|_{P_0} ∂lll∂u​∣P0​​

  • 方向导数计算公式:设函数 u = u ( x , y ) u=u(x,y) u=u(x,y) 在点 P 0 P_0 P0​ 点出可微分,则 u u u 在点 P 0 P_0 P0​ 处沿任意方向 l \pmb l lll 的方向导数都存在,且
    ∂ u ∂ l ∣ P 0 = l i m t → 0 + u ( P ) − u ( P 0 ) t = l i m t → 0 + u ( x 0 + Δ x , y 0 + Δ y ) − u ( x 0 , y 0 ) ( Δ x ) 2 + ( Δ y ) 2 = ∗ l i m t → 0 + u x ′ ( P 0 ) Δ x + u y ′ ( P 0 ) Δ y + o ( t ) ( Δ x ) 2 + ( Δ y ) 2 = u x ′ ( P 0 ) c o s α + u y ′ ( P 0 ) c o s β \begin{aligned} \frac{\partial u}{\partial \pmb l}|_{P_0} =& \underset{t\rightarrow 0^+}{lim}\frac{u(P)-u(P_0)}{t} \\ =& \underset{t\rightarrow 0^+}{lim}\frac{u(x_0+\Delta x,y_0+\Delta y)-u(x_0,y_0)}{\sqrt{(\Delta x)^2+(\Delta y)^2}}\\ \overset{*}{=}& \underset{t\rightarrow 0^+}{lim}\frac{u_x^\prime(P_0)\Delta x + u_y^\prime(P_0)\Delta y + o(t)}{\sqrt{(\Delta x)^2+(\Delta y)^2}}\\ =& u_x^\prime(P_0) cos\alpha + u_y^\prime(P_0) cos\beta \end{aligned} ∂lll∂u​∣P0​​===∗=​t→0+lim​tu(P)−u(P0​)​t→0+lim​(Δx)2+(Δy)2 ​u(x0​+Δx,y0​+Δy)−u(x0​,y0​)​t→0+lim​(Δx)2+(Δy)2 ​ux′​(P0​)Δx+uy′​(P0​)Δy+o(t)​ux′​(P0​)cosα+uy′​(P0​)cosβ​
    其中 c o s α cos\alpha cosα、 c o s β cos\beta cosβ 为方向 l \pmb l lll 的方向余弦, = ∗ \overset{*}{=} =∗ 部分利用的多元函数的泰勒展开式

-方向导数与梯度的关系

从上式可以看出,方向导数其实就是 梯度 g r a d u = ( u x ′ , u y ′ ) \pmb{grad} \, u = (u_x^\prime,u_y^\prime) grad​grad​​gradu=(ux′​,uy′​) 与 方向余弦组成的单位向量 I = ( c o s α , c o s β ) I=(cos\alpha,cos\beta) I=(cosα,cosβ) 的内积,即
∂ u ∂ l = g r a d u ⋅ I = ∣ g r a d u ∣ ∣ I ∣ c o s θ = ∣ g r a d u ∣ c o s θ \frac{\partial u}{\partial \pmb l}=\pmb{grad} \, u \cdot I=|\pmb{grad} \, u| \, |I| \, cos\theta =|\pmb{grad} \, u| \, cos\theta ∂lll∂u​=grad​grad​​gradu⋅I=∣grad​grad​​gradu∣∣I∣cosθ=∣grad​grad​​gradu∣cosθ
其中 θ \theta θ 为两向量之间的夹角。

那么如果此时想让 ∂ u ∂ l \frac{\partial u}{\partial \pmb l} ∂lll∂u​ 最大,自然是 θ \theta θ 为 0 o 0^o 0o 的时候,也就是方向与梯度一致的时候的方向导数最大,即变化率最大且是正的,那么如果沿着该方向前进,可以上升(增加)的最快;同理,如果 θ \theta θ 为 18 0 o 180^o 180o 的时候,也就是方向与梯度相反的时候的方向导数最小且为负(两者的绝对值相同),那么沿着该方向前进就可以下降(减小)的最快。

【注】以上证明角度最直观好想,对于梯度下降算法的证明还有其他角度,例如在一定条件下直接利用泰勒展开近似目标函数,然后直接求解,得到的就是梯度下降迭代式,在下文中的近端梯度下降其实就利用到了这个思想。

6.2 近端梯度下降(Proximal Gradient Descent)

参考文章(
近端梯度下降法,
《机器学习》(周志华)P253,
《机器学习公式详解》(俗称南瓜书)P122(pdf页数),
矩阵微分与向量函数泰勒展开)

近端梯度下降法是众多梯度下降 (gradient descent) 方法中的一种,将proximal翻译成“近端”可能是想表达 “接近,近似” 的意思,但在这点上,经典梯度算法其实也是近似的。与经典的梯度下降法相比,近端梯度下降法 主要是想解决目标函数中存在不可微或不方便微分的部分。如对于凸优化问题,当其目标函数存在 L1正则化项,近端梯度下降法就会派上用场。
(个人理解:其实就是在经典梯度下降的基础上,最后用分段函数的方法对L1正则化项求导)

具体来说,设优化目标
m i n f ( x ) + λ ∣ ∣ x ∣ ∣ 1 min \, f(\pmb x)+\lambda ||\pmb x||_1 minf(xxx)+λ∣∣xxx∣∣1​
令 ∇ \nabla ∇ 表示微分算子, ∇ f ( x ) \nabla f(\pmb x) ∇f(xxx) 即为 ∂ f ( x ) ∂ x \frac{\partial f(x)}{\partial x} ∂x∂f(x)​( x x x 为向量,粗的打不出来了)

- 大致思想

(1)在一定条件下,通过泰勒展开式将目标函数可微的部分化简
(2)以分段函数的形式,对 ∣ ∣ x ∣ ∣ 1 ||\pmb x||_1 ∣∣xxx∣∣1​ 求导,令导数得零,最后自然得到了分段函数形式的迭代公式 (加粗的是向量)。

- 推导过程


L-Lipschitz 条件简介:它是一个比“连续”更强的光滑性条件.直觉上,利普希茨连续函数限制了函数改变的速度,符合利普希茨条件的函数的斜率,必小于一个称为利普希茨常数的实数 L(该常数依函数而定,在梯度下降中,可以将此参数理解为学习率 η \eta η 的倒数,在训练中应该自己给出)(以上仅为个人理解,详见百度百科)

若 f ( x ) f(\pmb x) f(xxx) 可导,且 ∇ f ( x ) \nabla f(\pmb x) ∇f(xxx)满足 L-Lipschitz 条件,即存在常数 L > 0 L>0 L>0 使得
∣ ∇ f ( x ′ ) − ∇ f ( x ) ∣ ∣ x ′ − x ∣ ≤ L \frac{|\nabla f(\pmb x^\prime)-\nabla f(\pmb x)|}{|\pmb x^\prime-\pmb x|} \leq L ∣xxx′−xxx∣∣∇f(xxx′)−∇f(xxx)∣​≤L
(上式可看成是 f ( x ) f(\pmb x) f(xxx) 的二阶导数恒不大于 L L L ,即 ∇ 2 f ( x ) ≤ L \nabla^2 f(\pmb x) \leq L ∇2f(xxx)≤L )
则在 x k x_k xk​ 附近可将 f ( x ) f(x) f(x) 通过二阶泰勒展开式近似为
f ( x ) ^ ≈ f ( x k ) + ( ∇ f ( x k ) , ( x − x k ) ) + ∇ 2 f ( x k ) 2 ∣ ∣ x − x k ∣ ∣ 2 2 ≤ f ( x k ) + ( ∇ f ( x k ) , ( x − x k ) ) + L 2 ∣ ∣ x − x k ∣ ∣ 2 2 = L 2 ∣ ∣ x − ( x k − 1 L ∇ f ( x k ) ) ∣ ∣ 2 2 + c o n s t \begin{aligned} \hat{f(\pmb x)} \approx& f(\pmb x_k)+(\nabla f(\pmb x_k),(\pmb x-\pmb x_k))+\frac{\nabla^2f(x_k)}{2}||\pmb x - \pmb x_k||_2^2\\ \leq& f(\pmb x_k) + (\nabla f(\pmb x_k),(\pmb x-\pmb x_k))+\frac{L}{2}||\pmb x - \pmb x_k||_2^2\\ =& \frac{L}{2}||\pmb x- (\pmb x_k-\frac{1}{L} \nabla f(\pmb x_k))||_2^2 + const \end{aligned} f(xxx)^​≈≤=​f(xxxk​)+(∇f(xxxk​),(xxx−xxxk​))+2∇2f(xk​)​∣∣xxx−xxxk​∣∣22​f(xxxk​)+(∇f(xxxk​),(xxx−xxxk​))+2L​∣∣xxx−xxxk​∣∣22​2L​∣∣xxx−(xxxk​−L1​∇f(xxxk​))∣∣22​+const​
其中 c o n s t const const 是与 x \pmb x xxx 无关的常数(后续的求解过程也是求导,就直接忽略了,上述具体推导过程参见《机器学习公式详解》(俗称南瓜书)第11章)
也就是说在 x k \pmb x_k xxxk​ 附近可将目标函数进行简化,那么问题可转化为在这个小范围内寻找可使目标函数最小的 x k + 1 \pmb x_{k+1} xxxk+1​,然后再进行迭代(对于经典梯度下降算法来说,其实也是这么个思想),即
x k + 1 = a r g m i n x L 2 ∣ ∣ x − ( x k − 1 L ∇ f ( x k ) ) ∣ ∣ 2 2 + λ ∣ ∣ x ∣ ∣ 1 \pmb x_{k+1}=\underset{x}{arg\,min}\frac{L}{2}||\pmb x- (\pmb x_k-\frac{1}{L} \nabla f(\pmb x_k))||_2^2 + \lambda||\pmb x||_1 xxxk+1​=xargmin​2L​∣∣xxx−(xxxk​−L1​∇f(xxxk​))∣∣22​+λ∣∣xxx∣∣1​
令 x i x^i xi 表示 x \pmb x xxx 的第 i i i 个分量,将上式按分量展开可看出,其中不存在 x i x j ( i ≠ j ) x^ix^j(i \neq j) xixj(i​=j) 这样的项,也就是说各分量直间互不影响,假设只有一个分量 x 1 x^1 x1 带入展开,求导,令导得零,便可以求得这个小范围内的最小值点,推广可得上式解为:
可先计算 z = x k − 1 L ∇ f ( x k ) \pmb z=\pmb x_k-\frac{1}{L} \nabla f(\pmb x_k) zzz=xxxk​−L1​∇f(xxxk​)
x k + 1 i = { z i − λ / L , λ / L < z i 0 , ∣ z i ∣ ≤ λ / L z i + λ / L , z i < − λ / L x_{k+1}^i= \left\{ \begin{aligned} z^i& -\lambda/L, &\lambda /L& < z^i\\ 0&, &|z^i|& \leq \lambda/L\\ z^i& +\lambda/L, &z^i&<-\lambda/L \end{aligned} \right. xk+1i​=⎩⎪⎨⎪⎧​zi0zi​−λ/L,,+λ/L,​λ/L∣zi∣zi​<zi≤λ/L<−λ/L​
(如果不考虑 L1 正则化项,该步骤得解就是 经典梯度下降 的迭代公式)

7 代码实现

import numpy as np# 导入数据
filepath = "D:\\机器学习\\housing.csv"
data = np.loadtxt(filepath, delimiter=',', skiprows=1, encoding='utf-8')
# 选择特征与标签
x = data[0:20, 1:]
y = data[0:20, 0]
# 加一列
X = np.column_stack((x, np.ones((x.shape[0], 1))))
# 划分训练集与测试集
X_train, y_train = x[:10], y[:10]
X_test, y_test = x[10:], y[10:]print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)# 定义初始化参数
def initialize(dims):w = np.zeros((dims))return w# 在 MSE 基础上定义 Lasso 损失函数值def l1_loss(X, y, w, lambda_):num_train = X.shape[0]y_hat = np.dot(X, w)loss = np.sum((y_hat - y) ** 2) / num_train + np.sum(lambda_ * abs(w))return y_hat, loss, num_train# 定义训练过程def lasso_train(X, y, learn_rate=50, lambda_=50, epochs=300):loss_list = []w = initialize(X.shape[1])temporary_para = lambda_ * learn_ratefor i in range(epochs):y_hat, loss, num_train = l1_loss(X, y, w, lambda_)z = w - learn_rate * (np.dot(X.T, (y_hat - y)) * 2 / num_train)a = np.dot(X.T, (y_hat - y))b = X.Tc = (y_hat - y)y_hat[0]w_list = []for z_i in z:if z_i > temporary_para:w_i = z_i - temporary_paraelif z_i < temporary_para:w_i = z_i + temporary_paraelse:w_i = 0w_list.append(w_i)w = np.array(w_list)loss_list.append(loss)if i % 50 == 0:print('epoch %d loss %f' % (i, loss))params = wreturn loss, loss_list, paramsloss, loss_list, params = lasso_train(X,y,learn_rate=50,lambda_=50,epochs=300)

Lasso线性回归学习笔记(公式与代码实现)相关推荐

  1. 吴恩达《机器学习》学习笔记十一——神经网络代码

    吴恩达<机器学习>学习笔记十一--神经网络代码 数据准备 神经网络结构与代价函数· 初始化设置 反向传播算法 训练网络与验证 课程链接:https://www.bilibili.com/v ...

  2. 【学习笔记】低代码平台(LCAP:Low-Code Application Platform)

    学习笔记:低代码平台(LCAP:Low-Code Application Platform) [概念] 开发者写很少的代码,通过低代码平台提供的界面.逻辑.对象.流程等可视化编排工具来完成大量的开发工 ...

  3. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  4. 【学习笔记】结合代码理解设计模式 —— 代理模式(静态代理、动态代理、延伸)

    文章目录 什么是代理模式 一. 代理模式简介 二. 静态代理模式 三. 动态代理模式 万能模版 前言:笔记基于狂神设计模式视频.<大话设计模式>观后而写 (最近一直在更新之前的刷题博客,今 ...

  5. fmri学习笔记|SPM 代码 循环

    目录 SPM 用代码跑操作(上) 第一步生成脚本 第二步 看一下生成的脚本结构 temp_smooth_job temp_smooth SPM 用代码跑操作(下) 下面记录怎么修改输入input和fo ...

  6. 卷起来了,写了一套计算机视觉学习笔记(20G/代码/PPT/视频)

    AI 显然是最近几年非常火的一个新技术方向,从几年前大家认识到 AI 的能力,到现在产业里已经在普遍的探讨 AI 如何落地了. 我们可以预言未来在很多的领域,很多的行业,AI 都会在里边起到重要的作用 ...

  7. 李航统计学习方法----感知机章节学习笔记以及python代码

    目录 1 感知机模型 2 感知机学习策略 2.1 数据集的线性可分性 2.2 感知机学习策略 3 感知机学习算法 3.1 感知机学习算法的原始形式 3.2 感知机算法的对偶形式 4 感知机算法pyth ...

  8. 【学习笔记】Tensorflow-ENet代码学习(一)

    针对Tensorflow版ENet,记录一下自己对代码的理解. *非代码解读(因为水平不足),仅作为自己理解的备忘 **理解有误的地方,希望可以得到大牛的指点 一.文件夹内容(结构) (图片截取自作者 ...

  9. 正点原子STM32F103综合课程操作学习笔记(包含代码)

    整理资料来源 [正点原子] 手把手教你学STM32单片机教学视频 嵌入式 之 F103-基于新战舰V NANO_STM32F103开发指南-HAL库版本_V1.0.pdf 其它网络操作等 词汇解释 p ...

最新文章

  1. Kali渗透测试——快速查找Metasploit的模块
  2. p2p項目”復活“之想
  3. java maven项目构建ssh工程 父工程与子模块的拆分与聚合
  4. 华为nova5iotg功能使用_如果你的手机存在NFC功能,一定要尝试一下这些操作,体验超级棒...
  5. 鸿蒙系统已经推出,华为号召力太吓人!鸿蒙系统发布短短两天,主流应用已开始适配!...
  6. android应用资源可以分为两大类,Android 应用资源(一)
  7. sql中limit的用法——数据库系列学习笔记
  8. Exchange ActiveSyn身份验证类型
  9. 使用vsftp作为集群的yum仓库
  10. java三判式,Java编程设计模式,第 3 部分
  11. 为SQL Server Always On可用性组配置托管服务帐户
  12. 帧中继环境下ospf的使用(点到点模式)
  13. MOSS Search学习记录(八):高级搜索定制(中)
  14. web 实现分页打印功能
  15. 12_首页显示热门商品和最新商品
  16. Java 防止 SQL 注入工具类
  17. AP 微积分 第12版 第4章参考答案
  18. 移动友华PT924光猫获取超级用户方法
  19. 常见的系统漏洞安全扫描修复总结归纳
  20. 数据库增删改查的基本操作和SpringBoot创建

热门文章

  1. python可以编什么发型,长发编什么发型好看 2017—2018唯美长发编发
  2. 《卓同学的 Swift 面试题》
  3. 小米流出M2谍照意在阻击魅族
  4. android 仿美团骑手地图_Android仿美团外卖菜单界面
  5. 智能合约安全审计公司选型分析和审计报告资源下载---国内篇
  6. html坦克游戏,HTML5经典小游戏之坦克
  7. 2021-04-12 基于lua脚本实现的setnx+expire 保证原子性的锁
  8. 操作系统:FIFO算法详解及代码演示
  9. 第10节:文件操作/os模块/shutil模块/递归算法原理
  10. 关于@Autowired