注意:线性模型是指参数之间是线性组合的,而不是指模型的输入变量。输入变量之间可以是非线性组合的(此时也可以将非线性组合的参数定义为一个新的变量)。
记 x x x为n维的输入特征, θ \theta θ为参数(parameter),也叫权重(weight),假设函数为以 x x x为变量的线性函数:
(1-1) h θ ( x ) = ∑ i = 0 n θ i x i = θ T x h_{\theta}(x)=\sum_{i=0}^{n}\theta_i x_i=\theta^Tx\tag{1-1} hθ(x)=i=0∑nθixi=θTx(1-1)
其中,习惯令 x 0 = 1 x_0=1 x0=1,对应的 θ 0 \theta_0 θ0为截距项(intercept term)
代价函数(cost function)为 h ( x ( i ) ) h(x(i)) h(x(i))与对应的 y ( i ) y(i) y(i)的欧氏距离(的平方的一半):
(1-2) J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^{m}\left(h_{\theta}(x^{(i)})-y^{(i)}\right)^2\tag{1-2} J(θ)=21i=1∑m(hθ(x(i))−y(i))2(1-2)
上述代价函数其实就是最小二乘法拟合模型中的成本函数。
我们的目的是选取合适的 θ \theta θ使得最小化 J ( θ ) J(\theta) J(θ)。一般可采用迭代搜索的算法,选取 θ \theta θ的初始值,然后改变 θ \theta θ使得 J ( θ ) J(\theta) J(θ)减小并重复迭代这一过程。比较常用的算法是梯度下降(gradient descent)方法,迭代公式为:
(2-1) θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j:=\theta_j-\alpha \frac{\partial{}}{\partial{\theta_j}}J(\theta)\tag{2-1} θj:=θj−α∂θj∂J(θ)(2-1)
( 2 − 1 ) (2-1) (2−1)对所有参数 θ j , j = 1 , 2 , ⋯   , n \theta_j,j=1,2,\cdots,n θj,j=1,2,⋯,n都进行更新。 α \alpha α是学习率(learning rate),用来调节迭代步长。梯度下降法可以朝着 J J J降低最快的方向移动。
当训练集只有一个样本时,第 j j j维参数的梯度方向为:
(2-2) ∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 = ( h θ ( x ) − y ) x j \begin{aligned} \frac{\partial{}}{\partial{\theta_j}}J(\theta) &=\frac{\partial{}}{\partial{\theta_j}}\frac{1}{2}\left(h_{\theta}(x)-y\right)^2\\ &=(h_{\theta}(x)-y)x_j\\ \tag{2-2} \end{aligned} ∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2=(hθ(x)−y)xj(2-2)
此时, ( 2 − 1 ) (2-1) (2−1)可表示为:
(2-3) θ j : = θ j + α ( y − h θ ( x ) ) x j \theta_j:=\theta_j+\alpha (y-h_{\theta}(x))x_j\tag{2-3} θj:=θj+α(y−hθ(x))xj(2-3)
可以看到,(2-3)中参数变化量的绝对值正比于实际值与预测值的差的绝对值,所以在迭代初期能够较快地靠近最优值,迭代末期能够比较精细地逼近最优值。
一种更新方式是对所有样本的损失之和,也即 ( 1 − 2 ) (1-2) (1−2)所示代价函数进行求导代入 ( 2 − 1 ) (2-1) (2−1):
(2-4) θ j : = θ j + α ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j:=\theta_j+\alpha\sum_{i=1}^m (y^{(i)}-h_{\theta}(x^{(i)}))x_j^{(i)}\tag{2-4} θj:=θj+αi=1∑m(y(i)−hθ(x(i)))xj(i)(2-4)
上述方法在每一步迭代时都要对训练集所有样本计算损失函数,被称为批量梯度下降(batch gradient descent)。、
注意,如果目标函数不是凸函数,那么梯度下降法很容易陷入局部最优;线性回归的代价函数是凸函数,只要 α \alpha α选取得不是特别大,总能收敛到全局最小值点。
另一种更新策略是每次迭代时,分别计算一个样本的损失函数并对参数进行更新:
Loop{
for i=1 to m,{
KaTeX parse error: \tag works only in display equations
}
}
上面的方法叫做随机梯度下降(stochastic gradient descent)或者增量梯度下降(incremental gradient descent)。
由于批量梯度下降在每次迭代的时候都要计算训练集所有的样本的损失函数,因此当样本数 m m m比较大的时候梯度批量下降每次迭代所需的时间开销会比较大。此外,随机梯度下降也能够比批量梯度下降更快接近最小值点(注意,接近不代表一定会收敛,事实上,有时会在最小值点附近震荡,不过通常情况下足以满足精度要求)。
将训练集样本用矩阵的形式表示:
(2-6) X = [ ( x ( 1 ) ) T ( x ( 2 ) ) T ⋮ ( x ( m ) ) T ] X=\begin{bmatrix} \left(x^{(1)}\right)^T\\ \left(x^{(2)}\right)^T\\ \vdots\\ \left(x^{(m)}\right)^T\\ \end{bmatrix} \tag{2-6} X=⎣⎢⎢⎢⎢⎡(x(1))T(x(2))T⋮(x(m))T⎦⎥⎥⎥⎥⎤(2-6)
(2-7) y ⃗ = [ y ( 1 ) y ( 2 ) ⋮ y ( m ) ] \vec y=\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ \vdots\\ y^{(m)}\\ \end{bmatrix} \tag{2-7} y=⎣⎢⎢⎢⎡y(1)y(2)⋮y(m)⎦⎥⎥⎥⎤(2-7)
其中 X X X是所有样本的特征组成的 m × ( n + 1 ) m\times (n+1) m×(n+1)维矩阵, y ⃗ \vec y y是所有样本的对应标签组成的 m m m维向量。
代价函数可表示为:
(2-7) J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = 1 2 ( X θ − y ⃗ ) T ( X θ − y ⃗ ) \begin{aligned} J(\theta)&=\frac{1}{2}\sum_{i=1}^{m}\left(h_{\theta}(x^{(i)})-y^{(i)}\right)^2\\ &=\frac{1}{2}(X\theta-\vec y)^T(X\theta-\vec y) \end{aligned} \tag{2-7} J(θ)=21i=1∑m(hθ(x(i))−y(i))2=21(Xθ−y)T(Xθ−y)(2-7)
利用矩阵求导的一些知识不难求得:
(2-8) ∇ θ J ( θ ) = X T X θ − X T y ⃗ \nabla_{\theta}J(\theta)= X^TX\theta-X^T\vec y \tag{2-8} ∇θJ(θ)=XTXθ−XTy(2-8)
为了让 J J J最小,应该使得其导数为零,因此可以得到:
(2-9) θ = ( X T X ) − 1 X T y ⃗ \theta=(X^TX)^{-1}X^T\vec y \tag{2-9} θ=(XTX)−1XTy(2-9)
(2-9)需要对矩阵求运算开销比较大,实际中一般不采用逆
线性回归模型的成立需要满足一下几条假设:
线性假设:
(3-1) Y i = β 0 + β 1 X + ϵ i Y_i=\beta _0+\beta _1X+\epsilon _i\tag{3-1} Yi=β0+β1X+ϵi(3-1)
即自变量 X X X每增加一个单位对 Y Y Y的影响都是一样的( Y Y Y的值增加 β 1 \beta_1 β1).
误差项 ϵ \epsilon ϵ是一个服从正态分布、期望为零、方差为 δ 2 \delta^2 δ2的随机变量:
(3-1) E ( ϵ i ) = 0 E(\epsilon_i)=0\tag{3-1} E(ϵi)=0(3-1)
V a r ( ϵ i ) = δ 2 Var(\epsilon _i)=\delta ^2 Var(ϵi)=δ2
C o v ( ϵ i , ϵ j ) = 0 Cov(\epsilon _i,\epsilon _j)=0 Cov(ϵi,ϵj)=0
ϵ i N o r m a l \epsilon _i~Normal ϵi Normal
(即 ϵ \epsilon ϵ和 X X X不相关)