线性回归模型

  线性回归(linear regression)模型是监督学习(supervised learning)中最基础的模型。给出数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 1 ) , ⋯   , ( x m , y m ) } D=\left\{(\boldsymbol{x}_1,y_1), (\boldsymbol{x}_2,y_21), \cdots, (\boldsymbol{x}_m,y_m)\right\} D={(x1,y1),(x2,y21),,(xm,ym)},其中 x j = [ x j , 1 , x j , 2 , ⋯   , x j , n ] ⊤ ∈ R n \boldsymbol{x}_j = [x_{j,1}, x_{j,2}, \cdots, x_{j,n}]^\top \in \mathbb{R}^n xj=[xj,1,xj,2,,xj,n]Rn y j ∈ R y_j \in \mathbb{R} yjR。线性回归试图使用如下线性回归模型对数据集 D D D 进行拟合(学习),从而尽可能准确地作出预测。
f ( x ) = w ⊤ x + b f(\boldsymbol{x})=\boldsymbol{w}^\top \boldsymbol{x} + b f(x)=wx+b  进行拟合的过程实际上就是找到一个最佳的 w \boldsymbol{w} w b b b 使得 f ( x ) f(\boldsymbol{x}) f(x) y y y 之间的差距为零或尽可能地小。那么我们首先需要找到一个评价 f ( x ) f(\boldsymbol{x}) f(x) y y y 之间差距的函数——损失函数,然后才能以此为依据找到最佳的 w \boldsymbol{w} w b b b。均方误差(mean square error, MSE)是回归任务中最常用的损失函数,因此我们以均方误差为损失函数,表达式如下:
ℓ = 1 m ∑ j = 0 m [ f ( x j ) − y j ] 2 \ell = \frac{1}{m} \sum_{j=0}^m{ \left[ f\left(\boldsymbol{x}_j\right) - y_j \right]^2 } =m1j=0m[f(xj)yj]2  我们称上式中 ℓ \ell 为损失值。可以看到 f ( x ) f(\boldsymbol{x}) f(x) y y y 之间的差距越小, ℓ \ell 的值也就越小。所以问题就转化为:求 ℓ \ell 取最小值时, w \boldsymbol{w} w b b b 的值。面对这样的问题,数学给我们的直觉就是——求导,因为 ℓ \ell 是关于 w \boldsymbol{w} w b b b 的二次函数值,驻点(因变量对各自变量的偏导数值为零处)处必然为最小值点。在进行正式的运算之前,让我们先对表达式进行一个等价变型。我们增加以下几个符号及其定义:
X = [ x 1 ⊤ 1 x 2 ⊤ 1 ⋮ ⋮ x m ⊤ 1 ] = [ x 1 , 1 x 1 , 2 ⋯ x 1 , n 1 x 2 , 1 x 2 , 2 ⋯ x 2 , n 1 ⋮ ⋮ ⋱ ⋮ ⋮ x m , 1 x m , 2 ⋯ x m , n 1 ] w ~ = [ w 1 w 2 ⋮ w n b ] y = [ y 1 y 2 ⋮ y m ] \begin{matrix} X = \left[ \begin{matrix} \boldsymbol{x}_1^\top & 1 \\ \boldsymbol{x}_2^\top & 1 \\ \vdots & \vdots \\ \boldsymbol{x}_m^\top & 1 \end{matrix} \right] = \left[ \begin{matrix} x_{1,1} & x_{1,2} & \cdots & x_{1,n} & 1 \\ x_{2,1} & x_{2,2} & \cdots & x_{2,n} & 1 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ x_{m,1} & x_{m,2} & \cdots & x_{m,n} & 1 \end{matrix} \right] & \widetilde{\boldsymbol{w}} = \left[ \begin{matrix} w_1 \\ w_2 \\ \vdots \\ w_n \\ b \end{matrix} \right] & \boldsymbol{y} = \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{matrix} \right] \end{matrix} X= x1x2xm111 = x1,1x2,1xm,1x1,2x2,2xm,2x1,nx2,nxm,n111 w = w1w2wnb y= y1y2ym   我们使用以上符号对损失函数进行变型,而后再做进一步展开得:
ℓ = 1 m ( X w ~ − y ) ⊤ ( X w ~ − y ) = 1 m ( w ~ ⊤ X ⊤ − y ⊤ ) ( X w ~ − y ) = 1 m ( w ~ ⊤ X ⊤ X w ~ − w ~ ⊤ X ⊤ y − y ⊤ X w ~ + y ⊤ y ) \begin{aligned} \ell &= \frac{1}{m} \left( X\widetilde{\boldsymbol{w}} - \boldsymbol{y} \right)^\top \left( X\widetilde{\boldsymbol{w}} - \boldsymbol{y} \right) \\ &= \frac{1}{m} \left( \widetilde{\boldsymbol{w}}^\top X^\top - \boldsymbol{y}^\top \right) \left( X\widetilde{\boldsymbol{w}} - \boldsymbol{y} \right) \\ &= \frac{1}{m} \left( \widetilde{\boldsymbol{w}}^\top X^\top X \widetilde{\boldsymbol{w}} - \widetilde{\boldsymbol{w}}^\top X^\top \boldsymbol{y} - \boldsymbol{y}^\top X\widetilde{\boldsymbol{w}} + \boldsymbol{y}^\top \boldsymbol{y} \right) \\ \end{aligned} =m1(Xw y)(Xw y)=m1(w Xy)(Xw y)=m1(w XXw w XyyXw +yy)  根据矩阵求导公式 ∂ A ⊤ B A ∂ A = 2 B A \frac{\partial A^\top B A}{\partial A}=2BA AABA=2BA ∂ A ⊤ B ∂ A = B \frac{\partial A^\top B}{\partial A}=B AAB=B ∂ A B ∂ B = A ⊤ \frac{\partial A B}{\partial B}=A^\top BAB=A,可以得出:
∂ ℓ ∂ w ~ = 1 m [ 2 X ⊤ X w ~ − X ⊤ y − ( y ⊤ X ) ⊤ ] = 2 m ( X ⊤ X w ~ − X ⊤ y ) \begin{aligned} \frac{\partial \ell}{\partial \widetilde{\boldsymbol{w}}} &= \frac{1}{m} \left[ 2 X^\top X \widetilde{\boldsymbol{w}} - X^\top \boldsymbol{y} - \left( \boldsymbol{y}^\top X \right)^\top \right] \\ &= \frac{2}{m} \left( X^\top X \widetilde{\boldsymbol{w}} - X^\top \boldsymbol{y} \right) \end{aligned} w =m1[2XXw Xy(yX)]=m2(XXw Xy)   X X X 为可逆矩阵时,令 ∂ ℓ ∂ w ~ = 0 \frac{\partial \ell}{\partial \widetilde{\boldsymbol{w}}} = 0 w =0 得:
w ~ = X − 1 y \widetilde{\boldsymbol{w}} = X^{-1} \boldsymbol{y} w =X1y  求得此时最佳的 w ~ \widetilde{\boldsymbol{w}} w X − 1 y X^{-1} \boldsymbol{y} X1y
   X X X 为不可逆矩阵时才是我们最常见的情况。毕竟采集到如此精准的数据集以至于让 X X X 可逆,是一个极其罕见的状况。应用线性代数的知识可以知道:此时令 ∂ ℓ ∂ w ~ = 0 \frac{\partial \ell}{\partial \widetilde{\boldsymbol{w}}} = 0 w =0 X ⊤ X w ~ = X ⊤ y X^\top X \widetilde{\boldsymbol{w}} = X^\top \boldsymbol{y} XXw =Xy,将会得到无穷多个解。应对这样的状况,笔者已知有两种方法解决。第一种就是求线性方程组的通解,而后从中选择一个特解作为最终的结果。当前 matlib 等一些工具可以完成求线性方程组通解的工作,所以这种方法在计算机中是可行的。第二种方法就是梯度下降法。首先将 w ~ \widetilde{\boldsymbol{w}} w 初始化为某一向量(可以是各个分量都是同一常数的向量,也可以是各分量为随机数的向量),而后使用梯度下降法(gradient decent)来找到一个解。有关梯度下降法的具体原理这里不再赘述,现在给出公式:
w ~ t + 1 = w ~ t − λ ⋅ ∂ ℓ ∂ w ~ ∣ w ~ = w ~ t \widetilde{\boldsymbol{w}}_{t+1} = \widetilde{\boldsymbol{w}}_t - \lambda \cdot \left. \frac{\partial \ell}{\partial \widetilde{\boldsymbol{w}}} \right|_{\widetilde{\boldsymbol{w}} = \widetilde{\boldsymbol{w}}_t} w t+1=w tλw w =w t  其中 t t t 表示迭代次数, λ \lambda λ 表示学习率。我们理想的情况是当 ∂ ℓ ∂ w ~ ∣ w ~ = w ~ t = 0 \left. \frac{\partial \ell}{\partial \widetilde{\boldsymbol{w}}} \right|_{\widetilde{\boldsymbol{w}} = \widetilde{\boldsymbol{w}}_t} = 0 w w =w t=0 时停止迭代,但实际应用中受到数据集的影响可能并没有这么顺利。我们可以设置一个极小的阈值 ϵ \epsilon ϵ,仅当 ∂ ℓ ∂ w ~ ∣ w ~ = w ~ t > ϵ \left. \frac{\partial \ell}{\partial \widetilde{\boldsymbol{w}}} \right|_{\widetilde{\boldsymbol{w}} = \widetilde{\boldsymbol{w}}_t} > \epsilon w w =w t>ϵ 时执行迭代。
  对神经网路有了解的读者可能发现,使用梯度下降寻找解的过程实际上就是在训练一个没有激活函数的神经元。所以一些在神经网路上应用的技术可以应用到线性回归中来,例如:优化器、正则化等。为了提高线性回归模型的泛化(generalization)能力,需要在梯度下降中加入正则化。读者可以查看神经网路的正则化一文,这里不再赘述。

你可能感兴趣的:(机器学习,线性回归,算法)