机器学习算法之线性回归

1线性回归(linear regression)的概念

1.线性回归是一种回归分析技术,回归分析本质上就是一个函数估计的问题,就是找出因变量和自变量之间的因果关系。
2.回归分析的因变量应该是连续变量,若因变量为离散变量,则问题转化为分类问题。
3.回归分析是一个有监督学习的问题。

1.1线性模型

给定样本 x ⃗ \vec{x} x ,我们用列向量表示该样本
x ⃗ \vec{x} x = ( x ( 1 ) , x ( 2 ) , … , x ( n ) ) T (x^{(1)},x^{(2)},\dots,x^{(n)})^T (x(1),x(2),,x(n))T。样本有n种特性,我们用 x ( i ) x^{(i)} x(i)表示样本 x ⃗ \vec{x} x 的第i个特征。线性模型的形式为:
f ( x ⃗ ) = w ⃗ ⋅ x ⃗ + b f(\vec{x}) = \vec{w}\cdot\vec{x} + b f(x )=w x +b
其中, w ⃗ = ( w ( 1 ) , w ( 2 ) , … , w ( n ) ) T \vec{w} = (w^{(1)},w^{(2)},\dots,w^{(n)})^T w =(w(1),w(2),,w(n))T为每个特征对应的权重生成的权重向量,权重向量直观地表达了各个特征在预测中的重要性。

1.2广义线性模型(generalized linear model)

考虑单调可导函数 h ( ⋅ ) h(\cdot) h(),令 h ( y ) = w ⃗ T x ⃗ + b h(y) = \vec{w}^T\vec{x} + b h(y)=w Tx +b,这样得到的模型称为广义线性模型。
广义线性模型的一个典型的例子就是对数线性回归。当 h ( ⋅ ) = ln ⁡ ( ⋅ ) h(\cdot) = \ln(\cdot) h()=ln()时的广义线性模型就是对数线性回归,即 ln ⁡ y = w ⃗ T x ⃗ + b \ln y = \vec{w}^T\vec{x} + b lny=w Tx +b
它是通过 exp ⁡ ( w ⃗ T x ⃗ + b ) \exp(\vec{w}^T\vec{x} + b) exp(w Tx +b)拟合 y y y的。它虽然被称为广义线性回归,但实质上是非线性的。

1.3线性回归的公式及损失函数(Loss Function)

给定数据集 T = { ( x ⃗ 1 , y 1 ) , ( x ⃗ 2 , y 2 ) , … , ( x ⃗ N , y N ) } , x ⃗ i ∈ X ∈ R n , y ⃗ i ∈ Y ∈ R , i = 1 , 2 , … , N T = \{(\vec{x}_1,y_1),(\vec{x}_2,y_2),\dots,(\vec{x}_N,y_N)\},\vec{x}_i \in X\in \Bbb R^n,\vec{y}_i \in Y\in \Bbb R,i = 1,2,\dots,N T={(x 1,y1),(x 2,y2),,(x N,yN)},x iXRn,y iYR,i=1,2,,N,其中 ( x ⃗ i = ( x i ( 1 ) , x i ( 2 ) , … , x i ( n ) ) T (\vec{x}_i = (x_i^{(1)},x_i^{(2)},\dots,x_i^{(n)})^T (x i=(xi(1),xi(2),,xi(n))T。我们需要学习的模型为: f ( x ⃗ ) = w ⃗ ⋅ x ⃗ + b f(\vec{x}) = \vec{w}\cdot\vec{x} + b f(x )=w x +b
对于给定的样本 x ⃗ i \vec{x}_i x i,其预测值为 y ⃗ i = f ( x ⃗ i ) = w ⃗ ⋅ x ⃗ + b \vec{y}_i = f(\vec{x}_i) = \vec{w}\cdot\vec{x} +b y i=f(x i)=w x +b。我们采用平方损失函数,则在训练集 T T T上,模型的损失函数为: L ( f ) = ∑ i = 1 N ( y ^ i − y i ) 2 = ∑ i = 1 N ( w ⃗ ⋅ x ⃗ i + b − y i ) 2 L(f) = \sum_{i=1}^{N}(\hat{y}_i - y_i)^2 = \sum_{i=1}^{N}(\vec{w}\cdot\vec{x}_i + b - y_i)^2 L(f)=i=1N(y^iyi)2=i=1N(w x i+byi)2
我们的目标是损失函数最小化,即: ( w ⃗ ∗ , b ∗ ) = a r g min ⁡ w ⃗ , b ∑ i = 1 N ( w ⃗ ⋅ x ⃗ i + b − y i ) 2 (\vec{w}^*,b^*) = arg\min_{\vec{w},b}\sum_{i=1}^{N}(\vec{w}\cdot\vec{x}_i + b - y_i)^2 (w ,b)=argw ,bmini=1N(w x i+byi)2
可以用梯度下降法来求解上述最优化问题的数值解。使用梯度下降法时,要注意特征归一化。

2求解线性回归的方法

2.1梯度下降法(Gradient Descent)

梯度下降法是最早最简单,也是最为常用的最优化方法。
梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。
一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。
梯度下降法的搜索迭代示意图如下图所示:
梯度下降法示意图
假设 h ( θ ) h(\theta) h(θ)是要拟合的函数, J ( θ ) J(\theta) J(θ)是损失函数, θ \theta θ是要迭代求解的值, θ \theta θ求解出来了那最终要拟合的函数h(theta)就出来了。其中m是训练集的样本个数,n是特征的个数。
h ( θ ) = ∑ j = 0 n θ j x j h(\theta) = \sum_{j=0}^{n}\theta_jx_j h(θ)=j=0nθjxj
J ( θ ) = 1 2 m ∑ i = 1 m ( y i − h θ ( x i ) ) 2 J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(y^i - h_\theta(x^i))^2 J(θ)=2m1i=1m(yihθ(xi))2

2.1.1批量梯度下降法(Batch Gradient Descent):

在更新参数时使用所有的样本来进行更新;
J ( θ ) J(\theta) J(θ) θ \theta θ求偏导,得到每个theta对应的的梯度:
∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m ( y i − h θ ( x i ) ) x j i \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m}\sum_{i=1}^{m}(y^i - h_\theta(x^i))x^i_j θjJ(θ)=m1i=1m(yihθ(xi))xji
由于是要最小化风险函数,所以按每个参数 θ \theta θ的梯度负方向,来更新每个 θ \theta θ
θ j ′ = θ j + 1 m ∑ i = 1 m ( y i − h θ ( x i ) ) x j i \theta_j^\prime = \theta_j + \frac{1}{m}\sum_{i=1}^{m}(y^i - h_\theta(x^i))x^i_j θj=θj+m1i=1m(yihθ(xi))xji
从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,
如果m很大,那么可想而知这种方法的迭代速度会相当的慢。
所以,这就引入了另外一种方法——随机梯度下降。

2.1.2随机梯度下降法(Stochastic Gradient Descent):

仅选取一个样本来求梯度;
上面的风险函数可以写成如下这种形式,损失函数对应的是训练集中每个样本的粒度,
而上面批量梯度下降对应的是所有的训练样本:
J ( θ ) = 1 m ∑ i = 1 m 1 2 ( y i − h θ ( x i ) ) 2 = 1 m ∑ i = 1 m cos ⁡ t ( θ , ( x i , y i ) ) J(\theta) = \frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(y^i - h_\theta(x^i))^2 = \frac{1}{m}\sum_{i=1}^{m}\cos t(\theta,(x^i,y^i)) J(θ)=m1i=1m21(yihθ(xi))2=m1i=1mcost(θ,(xi,yi))
c o s t ( θ , ( x i , y i ) ) = 1 2 ( y i − h θ ( x i ) ) 2 cos t(\theta,(x^i,y^i)) = \frac{1}{2}(y^i - h_\theta(x^i))^2 cost(θ,(xi,yi))=21(yihθ(xi))2
每个样本的损失函数,对 θ \theta θ求偏导得到对应梯度,来更新 θ \theta θ
θ j ′ = θ j + ( y i − h θ ( x i ) ) x j i \theta_j^\prime = \theta_j + (y^i - h_\theta(x^i))x^i_j θj=θj+(yihθ(xi))xji

2.1.3小批量梯度下降法(Mini-batch Gradient Descent):

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于 m 个样本, 采用 x 个样本来迭代,1<x<m。一般可以取 x=10。
θ : = θ j − α 1 10 ∑ k = i i + 9 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta := \theta_j - \alpha\frac{1}{10}\sum_{k=i}^{i+9}(h_\theta(x^{(k)})- y^{(k)})x^{(k)}_j θ:=θjα101k=ii+9(hθ(x(k))y(k))xj(k)

2.1.4梯度下降法的缺点:

(1)靠近极小值时收敛速度减慢,如下图所示;
  (2)直线搜索时可能会产生一些问题;
  (3)可能会“之字形”地下降。

2.2最小二乘法(Least Square Method)

在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小。实际在求解时,用最小二乘法求解解析解的问题被称为多元线性回归(multivariate linear regression)。
令:
w ~ ⃗ = ( w ( 1 ) , w ( 2 ) , … , w ( n ) , b ) T = ( w ⃗ T , b ) T x ~ ⃗ = ( x ( 1 ) , x ( 2 ) , … , x ( n ) , 1 ) T = ( x ⃗ T , 1 ) T y ⃗ = ( y 1 , y 2 , … , y N ) T \vec{\tilde{w}} = (w^{(1)},w^{(2)},\dots,w^{(n)},b)^T = (\vec{w}^T,b)^T\\ \vec{\tilde{x}} = (x^{(1)},x^{(2)},\dots,x^{(n)},1)^T = (\vec{x}^T,1)^T\\ \vec y = (y_1,y_2,\dots,y_N)^T w~ =(w(1),w(2),,w(n),b)T=(w T,b)Tx~ =(x(1),x(2),,x(n),1)T=(x T,1)Ty =(y1,y2,,yN)T
则有:
∑ i = 1 N ( w ⃗ ⋅ x i ⃗ + b − y i ) 2 = ( y ⃗ − ( x ~ ⃗ 1 , x ~ ⃗ 2 , … , x ~ ⃗ N ) T w ~ ⃗ ) T ( y ⃗ − ( x ~ ⃗ 1 , x ~ ⃗ 2 , … , x ~ ⃗ N ) T w ~ ⃗ ) \sum_{i=1}^{N}(\vec{w}\cdot\vec{x_i} + b - y_i)^2 = (\vec{y} - (\vec{\tilde{x}}_1,\vec{\tilde{x}}_2,\dots,\vec{\tilde{x}}_N)^T\vec{\tilde{w}})^T (\vec{y} - (\vec{\tilde{x}}_1,\vec{\tilde{x}}_2,\dots,\vec{\tilde{x}}_N)^T\vec{\tilde{w}}) i=1N(w xi +byi)2=(y (x~ 1,x~ 2,,x~ N)Tw~ )T(y (x~ 1,x~ 2,,x~ N)Tw~ )
令:
x ⃗ = ( x ~ ⃗ 1 , x ~ ⃗ 2 , … , x ~ ⃗ N ) T = [ x ~ ⃗ 1 T x ~ ⃗ 2 T ⋮ x ~ ⃗ N T ] = [ x 1 ( 1 ) x 1 ( 2 ) … x 1 ( n ) 1 x 2 ( 1 ) x 2 ( 2 ) … x 2 ( n ) 1 ⋮ ⋮ ⋱ ⋮ 1 x N ( 1 ) x N ( 2 ) … x N ( n ) 1 ] \vec{x} = (\vec{\tilde{x}}_1,\vec{\tilde{x}}_2,\dots,\vec{\tilde{x}}_N)^T = \begin{bmatrix} \vec{\tilde{x}}_1^T \\ \vec{\tilde{x}}_2^T \\ \vdots \\ \vec{\tilde{x}}_N^T \\ \end{bmatrix} = \begin{bmatrix} x_1^{(1)} &amp; x_1^{(2)} &amp; \dots &amp; x_1^{(n)} &amp; 1\\ x_2^{(1)} &amp; x_2^{(2)} &amp; \dots &amp; x_2^{(n)} &amp; 1 \\ \vdots &amp; \vdots &amp; \ddots &amp; \vdots &amp; 1 \\ x_N^{(1)} &amp; x_N^{(2)} &amp; \dots &amp; x_N^{(n)} &amp; 1 \\ \end{bmatrix} x =(x~ 1,x~ 2,,x~ N)T=x~ 1Tx~ 2Tx~ NT=x1(1)x2(1)xN(1)x1(2)x2(2)xN(2)x1(n)x2(n)xN(n)1111
则:
w ~ ⃗ ∗ = a r g min ⁡ w ~ ⃗ ( y ⃗ − x ⃗ w ~ ⃗ ) T ( y ⃗ − x ⃗ w ~ ⃗ ) \vec{\tilde{w}}^* = arg\min_{\vec{\tilde{w}}}(\vec{y} - \vec{x}\vec{\tilde{w}})^T (\vec{y} - \vec{x}\vec{\tilde{w}}) w~ =argw~ min(y x w~ )T(y x w~ )
E w ~ ⃗ = ( y ⃗ − x ⃗ w ~ ⃗ ) T ( y ⃗ − x ⃗ w ~ ⃗ ) E_{\vec{\tilde{w}}} = (\vec{y} - \vec{x}\vec{\tilde{w}})^T (\vec{y} - \vec{x}\vec{\tilde{w}}) Ew~ =(y x w~ )T(y x w~ ),求它的极小值。对 w ~ ⃗ \vec{\tilde{w}} w~ 求导令导数为零,得到解析解:
∂ E w ~ ⃗ ∂ w ~ ⃗ = 2 x ⃗ T ( x ⃗ w ~ ⃗ − y ⃗ ) = 0 ⃗ ⟹ x ⃗ T x ⃗ w ~ ⃗ = x ⃗ T y ⃗ \frac{\partial E_{\vec{\tilde{w}}}}{\partial \vec{\tilde{w}}} = 2\vec{x}^T (\vec{x}\vec{\tilde{w}} - \vec{y}) = \vec{0} \Longrightarrow \vec{x}^T \vec{x}\vec{\tilde{w}} = \vec{x}^T \vec{y} w~ Ew~ =2x T(x w~ y )=0 x Tx w~ =x Ty
x ⃗ T x ⃗ \vec{x}^T \vec{x} x Tx 为满秩矩阵或者正定矩阵时,可得:
w ~ ⃗ ∗ = ( x ⃗ T x ⃗ ) − 1 x ⃗ T y ⃗ \vec{\tilde{w}}^* = (\vec{x}^T \vec{x})^{-1}\vec{x}^T\vec{y} w~ =(x Tx )1x Ty
于是学得多元线性回归模型为:
f ( x ~ ⃗ i ) = x ~ ⃗ i T w ~ ⃗ ∗ f(\vec{\tilde{x}}_i) = \vec{\tilde{x}}_i^T \vec{\tilde{w}}^* f(x~ i)=x~ iTw~
x ⃗ T x ⃗ \vec{x}^T \vec{x} x Tx 不为满秩矩阵时,存在多个解析解。我们引入 L 2 L_2 L2正则化项:
w ~ ⃗ ∗ = a r g min ⁡ w ~ ⃗ [ ( y ⃗ − x ⃗ w ~ ⃗ ) T ( y ⃗ − x ⃗ w ~ ⃗ ) + λ ∣ ∣ w ~ ⃗ ∣ ∣ 2 2 ] \vec{\tilde{w}}^* = arg\min_{\vec{\tilde{w}}} [(\vec{y} - \vec{x}\vec{\tilde{w}})^T (\vec{y} - \vec{x}\vec{\tilde{w}}) + \lambda\lvert\lvert\vec{\tilde{w}}\lvert\lvert_2^2] w~ =argw~ min[(y x w~ )T(y x w~ )+λw~ 22]其中, λ &gt; 0 \lambda &gt;0 λ>0调整正则化项与均方误差的比例; ∣ ∣ … ∣ ∣ 2 \lvert\lvert\dots\lvert\lvert_2 2 L 2 L_2 L2范数。

2.3牛顿法(Newton’s Method)

牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数 f ( x ) f (x) f(x)的泰勒级数的前面几项来寻找方程 f ( x ) = 0 f (x) = 0 f(x)=0的根。牛顿法最大的特点就在于它的收敛速度很快。
具体步骤:
  首先,选择一个接近函数 f ( x ) f (x) f(x)零点的 x 0 x_0 x0,计算相应的 f ( x 0 ) f (x_0) f(x0)和切线斜率 f ′ ( x 0 ) f^\prime(x_0) f(x0)。然后我们计算穿过点 ( x 0 , f ( x 0 ) ) (x_0, f(x_0)) (x0,f(x0)) 并且斜率为 f ′ ( x 0 ) f ^\prime(x_0) f(x0)的直线和 x 轴的交点的x坐标,也就是求如下方程的解: x ⋅ f ′ ( x 0 ) + f ( x 0 ) − x 0 ⋅ f ′ ( x 0 ) = 0 x\cdot f^\prime(x_0)+f(x_0)-x_0\cdot f^\prime(x_0) = 0 xf(x0)+f(x0)x0f(x0)=0
  我们将新求得的点的 x 坐标命名为 x 1 x_1 x1,通常 x 1 x_1 x1会比 x 0 x_0 x0更接近方程 f ( x ) = 0 f(x) = 0 f(x)=0的解。因此我们现在可以利用 x 1 x_1 x1开始下一轮迭代。迭代公式可化简为如下所示: x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n-\frac{f(x_n)}{f^\prime(x_n)} xn+1=xnf(xn)f(xn)
已经证明,如果 f ′ f^\prime f 是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值 x 0 x_0 x0位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果 f ′ ( x ) f^\prime(x) f(x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
由于牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是"切线法"。

2.3.1关于牛顿法和梯度下降法的效率对比:

从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。
  如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,
梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,
牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。
  所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
 (牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)

2.3.2牛顿法的优缺点总结:

优点:二阶收敛,收敛速度快;
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。

参考资料:

常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)
线性回归 - 爖
线性回归算法 - 黑桃
《Python大战机器学习》华校专著

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值