什么是线性回归?

线性回归方程是利用数理统计中的回归分析,来确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法之一。线性回归也是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。按自变量个数可分为一元线性回归分析方程和多元线性回归分析方程。摘至百度百科。

函数模型

线性回归的函数模型为 h w ( x i ) = w 0 + w 1 x 1 + w 2 x 2 + . . . + w n x n h_w(x^i)=w_0+w_1x_1+w_2x_2+...+w_nx_n hw(xi)=w0+w1x1+w2x2+...+wnxn
也可以写成 h w ( x i ) = w T x i = W T X h_w(x^i)=w^Tx_i=W^TX hw(xi)=wTxi=WTX,其中 X = [ <mstyle displaystyle="false" scriptlevel="0"> 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> x 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> . . . </mstyle> <mstyle displaystyle="false" scriptlevel="0"> x n </mstyle> ] X=\begin{bmatrix} 1 \\x_1\\... \\x_n \end{bmatrix} X=1x1...xn,
W = [ <mstyle displaystyle="false" scriptlevel="0"> w 0 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> w 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> . . . </mstyle> <mstyle displaystyle="false" scriptlevel="0"> w n </mstyle> ] W=\begin{bmatrix} w_0 \\w_1\\... \\w_n \end{bmatrix} W=w0w1...wn,假如存在数据集 D = ( X 1 , Y 1 ) , ( X 2 , Y 2 ) , . . . , ( X n , Y n ) D={(X_1,Y_1), (X_2, Y_2), ... ,(X_n, Y_n)} D=(X1,Y1),(X2,Y2),...,(Xn,Yn),为了方便我们写成矩阵形式如下 X = [ <mstyle displaystyle="false" scriptlevel="0"> 1 , x 1 1 , x 2 1 , . . . , X n 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> 1 , x 1 2 , x 2 2 , . . . , x n 2 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> . . . . . . </mstyle> <mstyle displaystyle="false" scriptlevel="0"> 1 , x 1 n , x 2 n , . . . , x n n </mstyle> ] X = \begin{bmatrix} 1, x_1^1, x_2^1, ..., X_n^1 \\ 1, x_1^2, x_2^2, ..., x_n^2 \\......\\1, x_1^n, x_2^n, ..., x_n^n \end{bmatrix} X=1,x11,x21,...,Xn11,x12,x22,...,xn2......1,x1n,x2n,...,xnn, 所以 h w ( x i ) = X W h_w(x^i) = XW hw(xi)=XW,线性回归中就是我们直到了D,也就是知道了 X X X,需要求出W,这里使用最小二乘法。

最小二乘法

什么是最小二乘呢?通俗的讲就是我们假设一条直线出来,然后把数据点带入假设的直线得到观测值,求使得实际值和观测值相减的平方和最小的参数,对变量求偏导联立可解。

损失函数

定义线性回归损失函数为: J ( W ) = 1 2 M i = 0 M ( h w ( x i ) y i ) 2 = 1 2 M ( X W y ) T ( X W Y ) J(W)=\frac{1}{2M}\sum_{i=0}^{M}(h_w(x^i)-y^i)^2=\frac{1}{2M}(XW-y)^T(XW-Y) J(W)=2M1i=0M(hw(xi)yi)2=2M1(XWy)T(XWY)

求W

有了损失函数之后我们的目标就是最小化损失函数,也就是求取一个 W W W使得 J ( W ) J(W) J(W)最小,这里需要分2种情况来讨论。
a) 矩阵满秩可求解时(也就是对W求导等于0)
J ( W ) = 1 / 2 ( X W y ) T ( X W y ) = 1 / 2 [ W T X T X W W T X T y y T X W + Y T Y ] = 1 / 2 [ W T X T X W 2 W T X T y + y T y ] J(W)=1/2(XW-y)^T(XW-y)=1/2[W^TX^TXW-W^TX^Ty-y^TXW+Y^TY]=1/2[W^TX^TXW-2W^TX^Ty+y^Ty] J(W)=1/2(XWy)T(XWy)=1/2[WTXTXWWTXTyyTXW+YTY]=1/2[WTXTXW2WTXTy+yTy] J ( W ) W = 0 \frac{\partial J(W)}{\partial W} = 0 WJ(W)=0=》 J ( W ) W = 1 / 2 [ W T X T X 2 X T y ] = 0 \frac{\partial J(W)}{\partial W} = 1/2[W^TX^TX-2X^Ty]=0 WJ(W)=1/2[WTXTX2XTy]=0=》 X T X W = X T y X^TXW=X^Ty XTXW=XTy=》 W = ( X T X ) 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)1XTy
b)矩阵不满秩(梯度下降)
梯度下降的原理大概可以把目标函数比作一座山,我们站在某个山坡上,往四周看一看,从哪个方向向下走一步,可以下降得最快。将梯度下降应用到线性回归中:首先对 θ \theta θ赋值,这个值可以是随机的,也可以让 θ \theta θ是一个全为0的向量,接下来改变 θ \theta θ的值,使得 j ( θ ) j(\theta) j(θ)按照梯度下降的方向进行减少。描述一下梯度减少的过程,对于函数 J ( θ ) J(\theta) J(θ)求偏导 J J J。重复下面的过程: θ 1 2 i = 1 m ( h θ ( x ) y ) 2 = ( h θ ( x ) y ) x ( i ) \frac{\partial}{\partial \theta}\frac{1}{2}\sum_{i=1}^{m}(h_{\theta}(x)-y)^2=(h_\theta(x)-y)x^(i) θ21i=1m(hθ(x)y)2=(hθ(x)y)x(i),下面是更新的过程,也就是会 θ i \theta_i θi会向着梯度最小的方向减少。 θ i \theta_i θi表示更新之前的值,后面减去的部分代表按梯度方向减少的量,\alpha表示步长,也就是每次按照梯度减少的方向变换多少。 θ i = θ i α θ J ( θ ) = θ i α ( h θ ( x ) y ) x i \theta_i=\theta_i-\alpha\frac{\partial}{\partial\theta}J(\theta)=\theta_i-\alpha(h_\theta(x)-y)x^i θi=θiαθJ(θ)=θiα(hθ(x)y)xi,对于之前假设的数据集D: X = [ <mstyle displaystyle="false" scriptlevel="0"> 1 , x 1 1 , x 2 1 , . . . , X n 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> 1 , x 1 2 , x 2 2 , . . . , x n 2 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> . . . . . . </mstyle> <mstyle displaystyle="false" scriptlevel="0"> 1 , x 1 n , x 2 n , . . . , x n n </mstyle> ] X = \begin{bmatrix} 1, x_1^1, x_2^1, ..., X_n^1 \\ 1, x_1^2, x_2^2, ..., x_n^2 \\......\\1, x_1^n, x_2^n, ..., x_n^n \end{bmatrix} X=1,x11,x21,...,Xn11,x12,x22,...,xn2......1,x1n,x2n,...,xnn W = [ <mstyle displaystyle="false" scriptlevel="0"> w 0 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> w 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> . . . </mstyle> <mstyle displaystyle="false" scriptlevel="0"> w n </mstyle> ] W=\begin{bmatrix} w_0 \\w_1\\... \\w_n \end{bmatrix} W=w0w1...wn y = [ <mstyle displaystyle="false" scriptlevel="0"> y 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> y 2 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> . . . </mstyle> <mstyle displaystyle="false" scriptlevel="0"> y n </mstyle> ] y=\begin{bmatrix} y1\\ y2 \\... \\y_n \end{bmatrix} y=y1y2...yn h = X W h=XW h=XW。对损失函数求偏导如下: W j J ( W ) = 1 M i = 1 i = m ( h w x ( i ) y ( i ) ) x j i \frac{\partial}{\partial W_j}J(W)=\frac{1}{M}\sum_{i=1}^{i=m}(h_w^{x(i)}-y^(i))x_j^i WjJ(W)=M1i=1i=m(hwx(i)y(i))xji W j : W j α W j J ( W ) W_j:W_j - \alpha \frac{\partial }{\partial W_j}J(W) Wj:WjαWjJ(W),使用矩阵表示:
E = X y = [ <mstyle displaystyle="false" scriptlevel="0"> h 1 y 1 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> h 2 y 2 </mstyle> <mstyle displaystyle="false" scriptlevel="0"> . . . </mstyle> <mstyle displaystyle="false" scriptlevel="0"> h n y n </mstyle> ] E=X-y=\begin{bmatrix}h_1-y_1\\ h_2-y_2 \\...\\h_n-y_n \end{bmatrix} E=Xy=h1y1h2y2...hnyn, W = W 1 M α X T E W=W-\frac{1}{M}\alpha X^TE W=WM1αXTE