线性回归

1. 线性回归公式

  线性回归算法就是找到一条直线(一元线性回归)或一个平面(多元线性回归)能够根据输入的特征向量 X X X 来更好的预测输出 Y Y Y 的值,本质上 X X X Y Y Y 是线性相关的。

输入数据 ( Y i , X i 1 , ⋯   , X i p ) , i = 1 , ⋯   , n \left(Y_{i}, X_{i 1}, \cdots, X_{i p}\right), \quad i=1, \cdots, n (Yi,Xi1,,Xip),i=1,,n
假设函数 (hypotheses function): h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n = ∑ i = 1 n θ i x i h_{\theta}(x)=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\ldots+\theta_{n} x_{n}=\sum_{i=1}^{n} \theta_{i} x_{i} hθ(x)=θ0+θ1x1+θ2x2++θnxn=i=1nθixi
损失函数 (loss function) L ( θ ) = ( h θ ( x ) − y ) 2 L(\theta)=\left(h_{\theta}(x)-y\right)^{2} L(θ)=(hθ(x)y)2 (单个样本)
代价函数 (cost function)
J ( θ ) = 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 = 1 2 n ∑ i = 1 n ( θ T x ( i ) − y ( i ) ) 2 = 1 2 n ( X θ − y ) T ( X θ − y ) \begin{aligned} J(\theta) &=\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \\ &=\frac{1}{2 n} \sum_{i=1}^{n}\left(\theta^{T} x^{(i)}-y^{(i)}\right)^{2} \\ &=\frac{1}{2 n}(X \theta-y)^{T}(X \theta-y) \end{aligned} J(θ)=2n1i=1n(hθ(x(i))y(i))2=2n1i=1n(θTx(i)y(i))2=2n1(Xθy)T(Xθy)

  最小二乘法是因为用“差的平方”来表示点和直线的误差,而不是“差的绝对值”,因为它是 最佳线性无偏估计证明 - 链接
参考链接 - 马同学 - 如何理解最小二乘法?

  • 使用梯度下降法[第2章节],使代价函数损失值最小

∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 = 2 ∗ 1 2 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) ∂ ∂ θ j ( h θ ( x ( i ) ) − y ( i ) ) ] = 1 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) ∂ ∂ θ j ( ∑ f = 0 m θ f x f ( i ) − y ( i ) ) ] = 1 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ] \begin{aligned} \frac{\partial}{\partial \theta_{j}} J(\theta) &=\frac{\partial}{\partial \theta_{j}} \frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \\ &=2 * \frac{1}{2 n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \frac{\partial}{\partial \theta_{j}}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)\right] \\ &=\frac{1}{n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \frac{\partial}{\partial \theta_{j}}\left(\sum_{f=0}^{m} \theta_{f} x_{f}^{(i)}-y^{(i)}\right)\right] \\ &=\frac{1}{n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}\right] \end{aligned} θjJ(θ)=θj2n1i=1n(hθ(x(i))y(i))2=22n1i=1n[(hθ(x(i))y(i))θj(hθ(x(i))y(i))]=n1i=1n(hθ(x(i))y(i))θjf=0mθfxf(i)y(i)=n1i=1n[(hθ(x(i))y(i))xj(i)]

  • 补充, h θ ( x ( i ) ) = ∑ f = 0 m θ f x f ( i ) = θ 0 x 0 ( i ) + θ 1 x 1 ( i ) + ⋯ + θ j x j ( i ) + ⋯ + θ m x m ( i ) h_{\theta}\left(x^{(i)}\right)=\sum_{f=0}^{m} \theta_{f} x_{f}^{(i)}=\theta_{0} x_{0}^{(i)}+\theta_{1} x_{1}^{(i)}+ \cdots +\theta_{j} x_{j}^{(i)}+ \cdots +\theta_{m} x_{m}^{(i)} hθ(x(i))=f=0mθfxf(i)=θ0x0(i)+θ1x1(i)++θjxj(i)++θmxm(i) m m m f f f 字母任意,为了和 n n n i i i 混淆
  • 迭代公式: θ j : = θ j + α 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+αn1i=1n(y(i)hθ(x(i)))xj(i)

解析解 θ ^ = ( X T X ) − 1 X T Y \hat{\theta}=\left(X^{T} X\right)^{-1} X^{T} Y θ^=(XTX)1XTY
∂ θ J ( θ ) = ∂ θ [ 1 2 ( X θ − y ) T ( X θ − y ) ] = ∂ θ [ 1 2 ( θ T X T − y T ) ( X θ − y ) ] = ∂ θ [ 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) ] = 1 2 [ 2 X T X θ − X T y − ( y T X ) T ] = X T X θ − X T y = 0 \begin{aligned} \partial_{\theta} J(\theta) &=\partial_{\theta}\left[\frac{1}{2}(X \theta-y)^{T}(X \theta-y)\right] \\ &=\partial_{\theta}\left[\frac{1}{2}\left(\theta^{T} X^{T}-y^{T}\right)(X \theta-y)\right] \\ &=\partial_{\theta}\left[\frac{1}{2}\left(\theta^{T} X^{T} X \theta-\theta^{T} X^{T} y-y^{T} X \theta+y^{T} y\right)\right] \\ &=\frac{1}{2}\left[2 X^{T} X \theta-X^{T} y-\left(y^{T} X\right)^{T}\right] \\ &=X^{T} X \theta-X^{T} y=0 \end{aligned} θJ(θ)=θ[21(Xθy)T(Xθy)]=θ[21(θTXTyT)(Xθy)]=θ[21(θTXTXθθTXTyyTXθ+yTy)]=21[2XTXθXTy(yTX)T]=XTXθXTy=0

  求参数 θ ^ \hat{\theta} θ^ ,发现其涉及到了矩阵的可逆问题,如果 X T X X^{T} X XTX 可逆,那么参数 θ ^ \hat{\theta} θ^ 的解唯一; 如果不可逆, 则此时就无法使用正规方程求导的方法来解。

  若 X T X X^{T} X XTX 可逆,通过最小二乘法的矩阵算法求出 θ ^ = ( X T X ) − 1 X T Y = X † Y \hat{\theta}=\left(X^{T} X\right)^{-1} X^{T} Y=X^{\dagger} Y θ^=(XTX)1XTY=XY,其中 X † X^{\dagger} X 在数学上被称为 伪逆,伪逆 X † X^{\dagger} X 是被 numpy 所支持,pinvX = np.linalg.pinv(X) # 计算伪逆 ; theta = pinvX @ y # 最小二乘法的矩阵算法

补充

  • θ T X T X θ \theta^TX^TX\theta θTXTXθ为对角矩阵, ∣ A A T ∣ = ∣ A ∣ ∣ A T ∣ = ∣ A ∣ 2 | AA^T|=|A||A^T|={|A|}^2 AAT=AAT=A2
  • 向量偏导数, ∂ ( x ⃗ T A x ⃗ ) ∂ x ⃗ = 2 A x ⃗ , ∂ A x ⃗ ∂ x ⃗ = A T , ∂ A x ⃗ ∂ x ⃗ T = A , ∂ ( x ⃗ T A ) ∂ x ⃗ = A \frac{\partial (\vec{x}^TA \vec{x})}{\partial \vec{x}} =2A\vec{x}, \qquad\frac{\partial A \vec{x}}{\partial \vec{x}} =A^{T}, \qquad \frac{\partial A \vec{x}}{\partial \vec{x}^{T}} =A, \qquad \frac{\partial\left(\vec{x}^{T} A\right)}{\partial \vec{x}} =A x (x TAx )=2Ax ,x Ax =AT,x TAx =A,x (x TA)=A

  线性回归一些具体描述与推导可参考这篇博文-链接

2. 梯度下降

  随机初始化 θ \theta θ,设置步长 α \alpha α ,设置迭代次数 m m m,求 J ( θ ) J(\theta) J(θ) 的导数 ∇ J ( θ ) \nabla J(\theta) J(θ)
    f o r i = 0 t o m for\quad i =0\quad to \quad m fori=0tom
    θ : = θ − α ∇ J ( θ ) \qquad\theta:=\theta-\alpha \nabla J(\theta) θ:=θαJ(θ)

2.1 梯度的概念

导数的意义:给定任意一个方向的变化率,是一个标量,反映的是一个函数的变化量。

方向导数:指定方向上的变化率

偏微分:给定自变量的方向,函数沿着 X 轴,沿着 Y 轴的变化趋势,也是一个标量。

梯度:把所有的偏微分当作一个向量来理解。向量的每一个轴是每一个方向上的偏微分。 ∇ f = ( ∂ f ∂ x 1 ; ∂ f ∂ x 2 ; … ; ∂ f ∂ x n ) \nabla f=\left(\frac{\partial f}{\partial x_{1}} ; \frac{\partial f}{\partial x_{2}} ; \ldots ; \frac{\partial f}{\partial x_{n}}\right) f=(x1f;x2f;;xnf)

梯度 有大小和方向。大小:可以反映变化趋势,方向:代表增长的方向。 梯度是一个向量,方向为方向导数取得最大值的方向。

例子:
在这里插入图片描述

  • x , y 代表的是函数的两个自变量, 箭头反映的是这个函数在x,y平面上的一个梯度
  • 箭头的长度代表这个梯度的大小,梯度的模。反应变化趋势
  • 箭头的方向代表梯度所指的方向。代表增长的方向。

在这里插入图片描述
  图中 红色 部分代表最高点,蓝色 部分代表最低点。在最高点求偏导下山,方向不止一个,求得是局部最小值。(若函数是严格的凸函数,可求得全局最小值)。
在这里插入图片描述

图中有两个 θ \theta θ值,均要进行更新

  根据第1章线性回归梯度更新公式 θ j : = θ j + α 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+αn1i=1n(y(i)hθ(x(i)))xj(i) ,引入实际范例中计算。表格数据中有两个特征量 x 1 , x 2 x_1, x_2 x1,x2和一个输出值 y y y,根据假设函数公式,引入特征量 x 0 x_0 x0,其值均为1。则特征数量 m = 3 m=3 m=3。表格中有2行数据,则数据量 n = 2 n=2 n=2

引入特征量 x 0 x_0 x0房子面积 x 1 x_1 x1房子朝向 x 2 x_2 x2房子每平米价格 y y y
12001305
11202130

y ( i ) − h θ ( x ( i ) ) = Y − X Θ = [ y ( 1 ) y ( 2 ) ⋮ y ( n ) ] − ( x 0 ( 1 ) x 1 ( 1 ) x 2 ( 1 ) ⋯ x m ( 1 ) x 0 ( 2 ) x 1 ( 2 ) x 2 ( 2 ) ⋯ x m ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ x 0 ( n ) x 1 ( n ) x 2 ( n ) ⋯ x m ( n ) ) ⋅ [ θ 0 θ 1 ⋮ θ m ] y^{(i)}-h_{\theta}(x^{(i)})=Y-X\Theta =\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ \vdots\\ y^{(n)}\\ \end{bmatrix} - \begin{pmatrix} x_0^{(1)}&x_1^{(1)}&x_2^{(1)}&\cdots&x_m^{(1)}\\ x_0^{(2)}&x_1^{(2)}&x_2^{(2)}&\cdots&x_m^{(2)}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ x_0^{(n)}&x_1^{(n)}&x_2^{(n)}&\cdots&x_m^{(n)}\\ \end{pmatrix} \cdot \begin{bmatrix} \theta_0\\ \theta_1\\ \vdots\\ \theta_m\\ \end{bmatrix} y(i)hθ(x(i))=YXΘ=y(1)y(2)y(n)x0(1)x0(2)x0(n)x1(1)x1(2)x1(n)x2(1)x2(2)x2(n)xm(1)xm(2)xm(n)θ0θ1θm

    假设函数 h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 h_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2} hθ(x)=θ0x0+θ1x1+θ2x2,随机给定 θ 0 = 0.1 , θ 1 = 0.01 , θ 2 = 0.3 \theta_{0}=0.1, \quad\theta_{1}=0.01,\quad \theta_{2}=0.3 θ0=0.1,θ1=0.01,θ2=0.3,则 h θ ( x ) = 0.1 x 0 + 0.01 x 1 + 0.3 x 2 h_{\theta}(x)=0.1x_{0}+0.01 x_{1}+0.3 x_{2} hθ(x)=0.1x0+0.01x1+0.3x2,指定学习率 α = 0.01 \alpha=0.01 α=0.01,进行迭代,更新 θ \theta θ
θ 0 = 0.1 + 0.01 × 1 2 × [ ( y ( 1 ) − h θ ( x ( 1 ) ) ) ⋅ x 0 1 + ( y ( 2 ) − h θ ( x ( 2 ) ) ) ⋅ x 0 2 ] = 0.1 + 0.01 × 1 2 × [ ( 305 − ( 0.1 × 1 + 0.01 × 200 + 0.3 × 1 ) ) × 1 + ( 130 − ( 0.1 × 1 + 0.01 × 120 + 0.3 × 2 ) ) × 1 ] = 1.7535 \begin{aligned} \theta_0&=0.1+0.01 \times \frac{1}{2}\times[(y^{(1)}-h_{\theta}(x^{(1)}))\cdot x_0^{1}+(y^{(2)}-h_{\theta}(x^{(2)}))\cdot x_0^{2}]\\ &=0.1 +0.01\times \frac{1}{2}\times[(305-(0.1\times1+ 0.01\times200+0.3\times1))\times1+(130-(0.1\times1+ 0.01\times120+0.3\times2))\times1]\\ &= 1.7535 \end{aligned} θ0=0.1+0.01×21×[(y(1)hθ(x(1)))x01+(y(2)hθ(x(2)))x02]=0.1+0.01×21×[(305(0.1×1+0.01×200+0.3×1))×1+(130(0.1×1+0.01×120+0.3×2))×1]=1.7535

θ 1 = 0.01 + 0.01 × 1 2 × [ ( y ( 1 ) − h θ ( x ( 1 ) ) ) ⋅ x 1 1 + ( y ( 2 ) − h θ ( x ( 2 ) ) ) ⋅ x 1 2 ] = 0.01 + 0.01 × 1 2 × [ ( 305 − ( 0.1 × 1 + 0.01 × 200 + 0.3 × 1 ) ) × 200 + ( 130 − ( 0.1 × 1 + 0.01 × 120 + 0.3 × 2 ) ) × 120 ] = 379.47 \begin{aligned} \theta_1&=0.01+0.01 \times \frac{1}{2}\times[(y^{(1)}-h_{\theta}(x^{(1)}))\cdot x_1^{1}+(y^{(2)}-h_{\theta}(x^{(2)}))\cdot x_1^{2}]\\ &=0.01 +0.01\times \frac{1}{2}\times[(305-(0.1\times1+ 0.01\times200+0.3\times1))\times200+(130-(0.1\times1+ 0.01\times120+0.3\times2))\times120]\\ &= 379.47 \end{aligned} θ1=0.01+0.01×21×[(y(1)hθ(x(1)))x11+(y(2)hθ(x(2)))x12]=0.01+0.01×21×[(305(0.1×1+0.01×200+0.3×1))×200+(130(0.1×1+0.01×120+0.3×2))×120]=379.47

θ 2 = 0.3 + 0.01 × 1 2 × [ ( y ( 1 ) − h θ ( x ( 1 ) ) ) ⋅ x 2 1 + ( y ( 2 ) − h θ ( x ( 2 ) ) ) ⋅ x 2 2 ] = 0.3 + 0.01 × 1 2 × [ ( 305 − ( 0.1 × 1 + 0.01 × 200 + 0.3 × 1 ) ) × 1 + ( 130 − ( 0.1 × 1 + 0.01 × 120 + 0.3 × 2 ) ) × 2 ] = 3.094 \begin{aligned} \theta_2&=0.3+0.01 \times \frac{1}{2}\times[(y^{(1)}-h_{\theta}(x^{(1)}))\cdot x_2^{1}+(y^{(2)}-h_{\theta}(x^{(2)}))\cdot x_2^{2}]\\ &=0.3 +0.01\times \frac{1}{2}\times[(305-(0.1\times1+ 0.01\times200+0.3\times1))\times1+(130-(0.1\times1+ 0.01\times120+0.3\times2))\times2]\\ &= 3.094 \end{aligned} θ2=0.3+0.01×21×[(y(1)hθ(x(1)))x21+(y(2)hθ(x(2)))x22]=0.3+0.01×21×[(305(0.1×1+0.01×200+0.3×1))×1+(130(0.1×1+0.01×120+0.3×2))×2]=3.094
   更新一次后, h θ ( x ) = 1.7535 x 0 + 379.47 x 1 + 3.094 x 2 h_{\theta}(x)=1.7535x_{0}+379.47 x_{1}+3.094 x_{2} hθ(x)=1.7535x0+379.47x1+3.094x2,再进行第二次更新…… θ \theta θ 参数值 相差悬殊,因为在数据处理时 未进行归一化处理

2.2 梯度下降法变种

2.2.1 批量梯度下降(Batch Gradient Descent BGD)

 前文所描述的均是批量梯度下降, 计算较复杂
        r e p e a t u n t i l c o n v e r g e n c e { repeat \quad until \quad convergence \{ repeatuntilconvergence{
        θ j : = θ j + α 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \qquad\quad\theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+αn1i=1n(y(i)hθ(x(i)))xj(i)
        } \} }

2.2.2 随机梯度下降(Stochastic Gradient Descent SGD)

  随机梯度下降方向不确定,容易发生震荡
        r e p e a t u n t i l c o n v e r g e n c e { repeat \quad until \quad convergence \{ repeatuntilconvergence{
        θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \qquad\quad\theta_{j}:=\theta_{j}+\alpha (y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+α(y(i)hθ(x(i)))xj(i)
        } \} }

2.2.3 小批量梯度下降(Mini-Batch Gradient Descent MBGD)

  小批量梯度下降方法更合适数据量大的数据,每次使用batch_size个样本进行更新
        r e p e a t u n t i l c o n v e r g e n c e { repeat \quad until \quad convergence \{ repeatuntilconvergence{
        θ j : = θ j + α b a t c h − n u m ∑ i = 1 b a t c h − n u m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \qquad\quad\theta_{j}:=\theta_{j}+ \frac{\alpha}{batch-num} \sum_{i=1}^{batch-num}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)} θj:=θj+batchnumαi=1batchnum(y(i)hθ(x(i)))xj(i)
        } \} }

3. 模型评价

3.1 均方误差(MSE)

M S E = 1 n ∑ i = 1 n ( y ( i ) − y ^ ( i ) ) 2 M S E=\frac{1}{n} \sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} MSE=n1i=1n(y(i)y^(i))2

    n n n: 样本数

3.2 均方根误差(RMSE)

R M S E = 1 n ∑ i = 1 n ( y ( i ) − y ^ ( i ) ) 2 R M S E=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2}} RMSE=n1i=1n(y(i)y^(i))2

3.3 平均绝对误差(MAE)

M A E = 1 n ∑ i = 1 n ∣ y ( i ) − y ^ ( i ) ∣ M A E=\frac{1}{n} \sum_{i=1}^{n}\left|y^{(i)}-\hat{y}^{(i)}\right| MAE=n1i=1ny(i)y^(i)

4. 正则化

过拟合 问题是机器学习的关键问题,可以通过 增大数据集减小模型复杂度 来解决。一般而言,数据集是很难增大的,更多是考虑减小模型复杂度,下一课看看如何更好地调节多项式回归模型的复杂度。

在这里插入图片描述

图源:马同学机器学习-监督式学习

  加罚项的目的,就是为了降低模型复杂度。

参考链接 - 安然烟火 - LinearRegression、岭回归、Lasso回归和ElasticNet回归总结-附python3代码实战及回归检验

  岭回归 与 Lasso回归 的出现是为了解决线性回归出现的 过拟合 以及在通过 正规方程方法求解 θ θ θ 的过程中出现的 ( X T X ) \left(X^{T} X\right) (XTX) 不可逆 这两类问题的,这两种回归均通过在损失函数中引入 正则化 项来达到目的。

  在日常机器学习任务中,如果 数据集的特征比样本点还多 ( X T X ) − 1 \left(X^{T} X\right)^{-1} (XTX)1的时候会出错。岭回归 最先用来处理特征数多于样本数的情况,现在也用于在估计中加入偏差,从而得到更好的估计。这里通过引入 λ \lambda λ 限制了所有 θ 2 \theta^2 θ2 之和,通过引入该惩罚项,能够减少不重要的参数,这个技术在统计学上也叫作 缩减(shrinkage)。和岭回归类似,另一个缩减 LASSO 也加入了正则项对回归系数做了限定。

  为了防止过拟合( θ 2 \theta^2 θ2 过大),在目标函数 J ( θ ) J(\theta) J(θ)后添加复杂度惩罚因子,即正则项来防止过拟合。正则项可以使用 L1-norm(Lasso)、L2-norm(Ridge),或结合L1-norm、L2-norm(Elastic Net)。

简单的理解正则化:

  • 正则化的目的:防止过拟合
  • 正则化的本质:约束(限制)要优化的参数

5. 岭回归

  如果样本数据过少导致线性回归拟合较差,则考虑采用 岭回归。如果输入特征的维度很高,而且是稀疏线性关系的话, 岭回归就不太合适,考虑使用 Lasso回归

  L2 范数正则化 解决过拟合(Ridge Regression,岭回归)
目标函数: J ( θ ) = 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∥ θ ∥ 2 2 = 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 m θ j 2 ( λ > 0 ) J(\theta) =\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda\|\theta\|_{2}^{2}=\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda\sum_{j=1}^m\theta_j^2 \quad(\lambda>0) J(θ)=2n1i=1n(hθ(x(i))y(i))2+λθ22=2n1i=1n(hθ(x(i))y(i))2+λj=1mθj2(λ>0)

岭回归求解: ∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 + ∂ ∂ θ j λ ∑ j = 1 m θ j 2 = 1 n ∑ i = 1 n [ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ] + 2 λ θ j \frac{\partial}{\partial \theta_{j}} J(\theta)=\frac{\partial}{\partial \theta_{j}} \frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\frac{\partial}{\partial \theta_{j}}\lambda\sum_{j=1}^m\theta_j^2=\frac{1}{n} \sum_{i=1}^{n}\left[\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}\right]+2\lambda\theta_j θjJ(θ)=θj2n1i=1n(hθ(x(i))y(i))2+θjλj=1mθj2=n1i=1n[(hθ(x(i))y(i))xj(i)]+2λθj

迭代公式: θ j : = θ j + α 1 n ∑ i = 1 n ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) − 2 λ θ j \theta_{j}:=\theta_{j}+\alpha \frac{1}{n} \sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)}-2\lambda\theta_j θj:=θj+αn1i=1n(y(i)hθ(x(i)))xj(i)2λθj

6. LASSO回归

  L1正则化(Lasso回归) 可以使得一些特征的系数变小,甚至还使一些绝对值较小的系数直接变为 0,从而增强模型的泛化能力 。对于高的特征数据,尤其是线性关系是稀疏的,就采用 L1正则化(Lasso回归),或者是要在一堆特征里面找出主要的特征,那么 L1正则化(Lasso回归)更是首选了。

  L1范数正则化 解决过拟合(LASSO回归)
目标函数: J ( θ ) = 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∣ θ ∣ 1 = 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 m ∣ θ j ∣ ( λ > 0 ) J(\theta) =\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda|\theta|_{1}=\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda\sum_{j=1}^m|\theta_j| \quad(\lambda>0) J(θ)=2n1i=1n(hθ(x(i))y(i))2+λθ1=2n1i=1n(hθ(x(i))y(i))2+λj=1mθj(λ>0)
LASSO回归求解, J ( θ ) J(\theta) J(θ)前面系数 1 2 n \frac{1}{2 n} 2n1去掉,对 θ \theta θ无影响。改写为 J ( θ ) = ∑ i = 1 n ( y ( i ) − ∑ j = 0 m θ j x j ( i ) ) 2 + λ ∑ j = 0 m ∣ θ j ∣ J(\theta) =\sum_{i=1}^{n}\left(y^{(i)}-\sum_{j=0}^m\theta_jx_j^{(i)}\right)^{2}+\lambda\sum_{j=0}^m|\theta_j| J(θ)=i=1n(y(i)j=0mθjxj(i))2+λj=0mθj

J ( θ ) J(\theta) J(θ)左、右两项拆开分别求导
   ① 残差部分 ∑ i = 1 n ( y ( i ) − ∑ j = 0 m θ j x j ( i ) ) 2 \sum_{i=1}^{n}\left(y^{(i)}-\sum_{j=0}^m\theta_jx_j^{(i)}\right)^{2} i=1n(y(i)j=0mθjxj(i))2求导,为了区分 j j j 开来,使用 k k k θ k \theta_k θk 进行求导区分
∂ ∂ θ k RSS ⁡ ( θ ) = 2 ∑ i = 1 n ( y ( i ) − ∑ j = 0 m θ j x j ( i ) ) ( − x k ( i ) ) = − 2 ∑ i = 1 n ( x k ( i ) y ( i ) − x k ( i ) ∑ j = 0 m θ j x j ( i ) ) = − 2 ∑ i = 1 n ( x k ( i ) y ( i ) − x k ( i ) ∑ j = 0 , j ≠ k m θ j x j ( i ) − θ k x k ( i ) 2 ) = − 2 ∑ i = 1 n [ x k ( i ) ( y ( i ) − ∑ j = 0 , j ≠ k m θ j x j ( i ) ) ] + 2 θ k ∑ i = 1 n x k ( i ) 2 \begin{array}{l} \frac{\partial}{\partial \theta_{k}} \operatorname{RSS}(\theta)=2 \sum_{i=1}^{n}\left(y^{(i)}-\sum_{j=0}^{m} \theta_{j} x_{j}^{(i)}\right)\left(-x_{k}^{(i)}\right) \\ =-2 \sum_{i=1}^{n}\left(x_{k}^{(i)} y^{(i)}-x_{k}^{(i)} \sum_{j=0}^{m} \theta_{j} x_{j}^{(i)}\right) \\ =-2 \sum_{i=1}^{n}\left(x_{k}^{(i)} y^{(i)}-x_{k}^{(i)} \sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}-\theta_{k} x_{k}^{(i)^{2}}\right) \\ =-2 \sum_{i=1}^{n}\left[x_{k}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}\right)\right]+2 \theta_{k} \sum_{i=1}^{n} x_{k}^{(i)^{2}} \end{array} θkRSS(θ)=2i=1n(y(i)j=0mθjxj(i))(xk(i))=2i=1n(xk(i)y(i)xk(i)j=0mθjxj(i))=2i=1n(xk(i)y(i)xk(i)j=0,j=kmθjxj(i)θkxk(i)2)=2i=1n[xk(i)(y(i)j=0,j=kmθjxj(i))]+2θki=1nxk(i)2

     令 p k = ∑ i = 1 n [ x k ( i ) ( y ( i ) − ∑ j = 0 , j ≠ k m θ j x j ( i ) ) ] p_{k}=\sum_{i=1}^{n}\left[x_{k}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}\right)\right] pk=i=1n[xk(i)(y(i)j=0,j=kmθjxj(i))] z k = ∑ i = 1 n x k ( i ) 2 z_{k}=\sum_{i=1}^{n} x_{k}^{(i)^{2}} zk=i=1nxk(i)2
     则 ∂ ∂ θ k R S S ( θ ) = − 2 p k + 2 θ k z k \frac{\partial}{\partial \theta_{k}} RSS(\theta)=-2 p_{k}+2 \theta_{k} z_{k} θkRSS(θ)=2pk+2θkzk
   ② 对正则项 λ ∑ j = 0 m ∣ θ j ∣ \lambda\sum_{j=0}^m|\theta_j| λj=0mθj 求偏导, ∣ θ j ∣ |\theta_j| θj分大于0,小于0,等于0讨论,且在等于0处不可导。
∂ ∂ θ k R ( θ ) = { − λ θ k < 0 [ − λ , λ ] θ k = 0 λ θ k > 0 \frac{\partial}{\partial \theta_{k}} R(\theta)=\left\{\begin{array}{ll}-\lambda & \theta_{k}<0 \\ {[-\lambda, \lambda]} & \theta_{k}=0 \\ \lambda & \theta_{k}>0\end{array}\right. θkR(θ)=λ[λ,λ]λθk<0θk=0θk>0

   ③ 对整体求偏导
∂ ∂ θ k J ( θ ) = − 2 p k + 2 θ k z k + { − λ θ k < 0 [ − λ , λ ] θ k = 0 λ θ k > 0 = { − 2 p k + 2 θ k z k − λ θ k < 0 [ − 2 p k − λ , − 2 p k + λ ] θ k = 0 − 2 p k + 2 θ k z k + λ θ k > 0 \frac{\partial}{\partial \theta_{k}} J(\theta)=-2 p_{k}+2 \theta_{k} z_{k}+\left\{\begin{array}{ll} -\lambda & \theta_{k}<0 \\ {[-\lambda, \lambda]} & \theta_{k}=0 \\ \lambda & \theta_{k}>0 \end{array}=\left\{\begin{array}{ll} -2 p_{k}+2 \theta_{k} z_{k}-\lambda & \theta_{k}<0 \\ {\left[-2 p_{k}-\lambda,-2 p_{k}+\lambda\right]} & \theta_{k}=0 \\ -2 p_{k}+2 \theta_{k} z_{k}+\lambda & \theta_{k}>0 \end{array}\right.\right. θkJ(θ)=2pk+2θkzk+λ[λ,λ]λθk<0θk=0θk>0=2pk+2θkzkλ[2pkλ,2pk+λ]2pk+2θkzk+λθk<0θk=0θk>0

     令 ∂ ∂ θ k J ( θ ) = 0 \frac{\partial}{\partial \theta_{k}} J(\theta)=0 θkJ(θ)=0
θ k = { ( p k + λ / 2 ) / z k p k < − λ / 2 0 − λ / 2 ≤ p k ≤ λ / 2 ( p k − λ / 2 ) / z k p k > λ / 2 < / f o n t > \theta_{k}=\left\{\begin{array}{ll} \left(p_{k}+\lambda / 2\right) / z_{k} & p_{k}<-\lambda / 2 \\ 0 & -\lambda / 2 \leq p_{k} \leq \lambda / 2 \\ \left(p_{k}-\lambda / 2\right) / z_{k} & p_{k}>\lambda / 2 \end{array}\right.</font> θk=(pk+λ/2)/zk0(pkλ/2)/zkpk<λ/2λ/2pkλ/2pk>λ/2</font>

最终迭代公式: p k = ∑ i = 1 n [ x k ( i ) ( y ( i ) − ∑ j = 0 , j ≠ k m θ j x j ( i ) ) ] p_{k}=\sum_{i=1}^{n}\left[x_{k}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq k}^{m} \theta_{j} x_{j}^{(i)}\right)\right] pk=i=1n[xk(i)(y(i)j=0,j=kmθjxj(i))] z k = ∑ i = 1 n x k ( i ) 2 z_{k}=\sum_{i=1}^{n} x_{k}^{(i)^{2}} zk=i=1nxk(i)2
θ k = { ( p k + λ / 2 ) / z k p k < − λ / 2 0 − λ / 2 ≤ p k ≤ λ / 2 ( p k − λ / 2 ) / z k p k > λ / 2 \theta_{k}=\left\{\begin{array}{ll} \left(p_{k}+\lambda / 2\right) / z_{k} & p_{k}<-\lambda / 2 \\ 0 & -\lambda / 2 \leq p_{k} \leq \lambda / 2 \\ \left(p_{k}-\lambda / 2\right) / z_{k} & p_{k}>\lambda / 2 \end{array}\right. θk=(pk+λ/2)/zk0(pkλ/2)/zkpk<λ/2λ/2pkλ/2pk>λ/2

带入2.1章节例子进行梯度更新:

引入特征量 x 0 x_0 x0房子面积 x 1 x_1 x1房子朝向 x 2 x_2 x2房子每平米价格 y y y
12001305
11202130
p 0 p_0 p0 z 0 z_0 z0 p 1 p_1 p1 z 1 z_1 z1 p 2 p_2 p2 z 2 z_2 z2

  对应每一项都有相应 p k p_k pk z k z_k zk k = 1 , 2 , 3 k=1,2,3 k=1,2,3
  分别求 p 1 p_1 p1 z 1 z_1 z1举例,此时 k = 1 , n = 2 , m = 3 ( 3 个 值 ) k=1,n=2,m=3(3个值) k=1,n=2,m=33。( i i i分别等于1,2;内嵌 j j j分别等于0,2)
p 1 = ∑ i = 1 n [ x 1 ( i ) ( y ( i ) − ∑ j = 0 , j ≠ 1 m θ j x j ( i ) ) ] = [ 200 × ( 305 − ( θ 0 ⋅ x 0 ( 1 ) + θ 2 ⋅ x 2 ( 1 ) ) + 120 × ( 130 − ( θ 0 ⋅ x 0 ( 2 ) + θ 2 ⋅ x 2 ( 2 ) ) ) ] p_{1}=\sum_{i=1}^{n}\left[x_{1}^{(i)}\left(y^{(i)}-\sum_{j=0, j \neq 1}^{m} \theta_{j} x_{j}^{(i)}\right)\right]=[200\times(305-(\theta_0\cdot x_0^{(1)}+\theta_2\cdot x_2^{(1)})+120\times(130-(\theta_0\cdot x_0^{(2)}+\theta_2\cdot x_2^{(2)}))] p1=i=1nx1(i)y(i)j=0,j=1mθjxj(i)=[200×(305(θ0x0(1)+θ2x2(1))+120×(130(θ0x0(2)+θ2x2(2)))]

z 1 = ∑ i = 1 n x 1 ( i ) 2 = x 1 ( 1 ) 2 + x 1 ( 2 ) 2 = 20 0 2 + 12 0 2 z_{1}=\sum_{i=1}^{n} x_{1}^{(i)^{2}}={x_1^{(1)}}^2+{x_1^{(2)}}^2=200^2+120^2 z1=i=1nx1(i)2=x1(1)2+x1(2)2=2002+1202

θ 1 = { ( p 1 + λ / 2 ) / z 1 p 1 < − λ / 2 0 − λ / 2 ≤ p 1 ≤ λ / 2 ( p 1 − λ / 2 ) / z 1 p 1 > λ / 2 \theta_{1}=\left\{\begin{array}{ll} \left(p_{1}+\lambda / 2\right) / z_{1} & p_{1}<-\lambda / 2 \\ 0 & -\lambda / 2 \leq p_{1} \leq \lambda / 2 \\ \left(p_{1}-\lambda / 2\right) / z_{1} & p_{1}>\lambda / 2 \end{array}\right. θ1=(p1+λ/2)/z10(p1λ/2)/z1p1<λ/2λ/2p1λ/2p1>λ/2

  根据此方法,可分别求 p 0 , z 0 , θ 0 p_0,z_0,\theta_0 p0,z0,θ0 p 2 , z 2 , θ 2 p_2,z_2,\theta_2 p2,z2,θ2;之后再进行多次迭代。

7. 实现代码

名称代码链接
梯度下降实例梯度下降
线性回归实现线性回归
LASSO回归实现LASSO回归
波士顿房价预测房价预测

参考链接 - 深度之眼 机器学习寒假训练营
参考链接 - 安然烟火 - LinearRegression、岭回归、Lasso回归和ElasticNet回归总结-附python3代码实战及回归检验
参考链接 - github - NLPer-Interview/4-机器学习基础/回归模型1 - 线性回归.md

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值