同内容讲解视频,如果不想看文字就去看视频吧~
线性回归,线性回归,首先我们要搞懂这四个字里两个词的意思
何为线性?何为回归?
线性,包括可加性和齐次性
①可加性,也称叠加性。函数 f f f若满足下式
f ( x + y ) = f ( x ) + f ( y ) f(x+y) = f(x) + f(y) f(x+y)=f(x)+f(y)
则称函数 f f f具有可加性
②齐次性,也称均匀性。若函数 f f f若满足下式
f ( a x ) = a f ( x ) f(ax)=af(x) f(ax)=af(x)
其中,a为与x无关的常数。则称函数 f f f具有齐次性
我们其实也可以用一个式子来描述这可加性与齐次性,如下
f ( a x + b y ) = a f ( x ) + b f ( y ) f(ax+by) = af(x)+bf(y) f(ax+by)=af(x)+bf(y)
当函数 f f f同时具有可加性与齐次性时,我们则称函数 f f f为线性函数
回归是确定多个变量间相互依赖的定量关系
在机器学习中,回归往往指预测的输出为连续值,而线性回归也确实是解决此类任务的
分类任务则是预测的输出为离散型
解决回归任务,实际就是找到一条线/超平面来拟合这些样本点,使他们之间的误差尽可能的小。而不同的线/超平面(其中不同的参数值形成的)在同一个数据集下对应着不同的误差,我们则需要找到让误差最小的线/超平面。
现以形如y=kx+b的一元线性函数为例
淡蓝色为样本点,深蓝色和红色的线为生成的两条线。那你们觉得哪条线跟样本点更加符合整体的趋势呢?也就是哪条线更拟合呢?
你:这想都不用想的好吧!那肯定是蓝色那条线效果好啊!
但它为什么好呢?我们要定量得去描述它。此时则需要引入损失函数(又称误差函数)来衡量误差
回归任务中常用的损失函数有:
均方误差MSE:
1 m ∑ i = 1 m ( y i − y ^ i ) 2 \frac{1}{m}\sum \limits _{i=1} ^m(y_i-\hat y_i)^2 m1i=1∑m(yi−y^i)2
均方根误差RMSE:
1 m ∑ i = 1 m ( y i − y ^ i ) 2 \sqrt{\frac{1}{m}\sum \limits _{i=1} ^m(y_i-\hat y_i)^2} m1i=1∑m(yi−y^i)2
平均绝对误差MAE:
1 m ∑ i = 1 m ∣ ( y i − y ^ i ) ∣ \frac{1}{m}\sum \limits _{i=1} ^m|(y_i-\hat y_i)| m1i=1∑m∣(yi−y^i)∣
R-squared:
R 2 ( y , y ^ ) = 1 − ∑ i = 0 n ( y i − y ^ i ) 2 ∑ i = 0 n ( y i − y ˉ ) 2 R^2(y, \hat y)= 1 - \frac{\sum \limits _{i=0} ^n(y_i-\hat y_i)^2}{\sum \limits _{i=0} ^n(y_i-\bar y)^2} R2(y,y^)=1−i=0∑n(yi−yˉ)2i=0∑n(yi−y^i)2
可以这么理解:将TSS理解为全部按平均值预测,RSS理解为按模型预测,这就相当于去比较你模型预测和全部按平均值预测的比例,这个比例越小,则模型越精确。当然该指标存在负数的情况,即模型预测还不如全部按平均值预测。越接近1,模型拟合得就越好
再次强调:回归任务是拟合样本点,使误差尽可能的小
我们用一元线性函数为例讲解线性回归,其次再引入多元线性回归
此节以一元线性函数y=kx+b为例,采用均方误差MSE作为损失函数,那么损失函数就是关于变量k,b的函数
L ( k , b ) = 1 m ∑ i = 1 m ( ( k x i + b ) − y i ) 2 L(k, b) = \frac{1}{m}\sum\limits_{i=1} ^m((kx_i+b)-y_i)^2 L(k,b)=m1i=1∑m((kxi+b)−yi)2
其中,m为样本个数。此时任务为最小化L(k, b)函数
相信大家在高中或是大学都做过求函数最小值的题,当时是怎么做的呢?求导!让导数=0,求出此时的x,此时的x让函数取得最小值点。但这里是两个变量,那么则求偏导,让偏导=0,求出此时的各个参数,此时的各个参数让损失函数取得最小值,也就是误差最小,也就是拟合效果最好!
此时,我们对L函数求b的偏导,使用链式求导法则
∂ L ∂ b = ∑ i = 1 m 2 ( k x i + b − y i ) = 0 ⇒ k ∑ i = 1 m x i + ∑ i = 1 m b − ∑ i = 1 m y i = 0 ⇒ k m x ˉ + m b − m y ˉ = 0 ① ⇒ b = y ˉ − k x ˉ \frac{\partial L}{\partial b} = \sum \limits _{i=1} ^m 2(kx_i+b-y_i) = 0 \\ \Rightarrow k\sum \limits _{i=1} ^m x_i+\sum \limits _{i=1} ^m b-\sum \limits _{i=1} ^m y_i = 0 \\ \Rightarrow km\bar x + mb - m\bar y = 0① \\ \Rightarrow b = \bar y - k\bar x ∂b∂L=i=1∑m2(kxi+b−yi)=0⇒ki=1∑mxi+i=1∑mb−i=1∑myi=0⇒kmxˉ+mb−myˉ=0①⇒b=yˉ−kxˉ
第一行到第二行:k跟i无关,乘积项可直接提到连加号外面
第二行到第三行:联想一下求均值的公式 x ˉ = 1 m ∑ i = 1 m x i \bar x = \frac1m\sum \limits_{i=1} ^m x_i xˉ=m1i=1∑mxi,实际上把m乘过去就是上面的替换
同时,我们记第三行的式子为①,后续推导有用
接着,我们对L函数求k的偏导,稍微复杂一些
∂ L ∂ k = ∑ i = 1 m x i ( k x i + b − y i ) = 0 ⇒ k ∑ i = 1 m x i 2 + b ∑ i = 1 m x i − ∑ i = 1 m x i y i = 0 ⇒ k ∑ i = 1 m x i 2 + m b x ˉ − ∑ i = 1 m x i y i = 0 ② \frac{\partial L}{\partial k} = \sum \limits _{i=1} ^m x_i(kx_i+b-y_i) = 0 \\ \Rightarrow k\sum \limits _{i=1} ^m x_i^2 + b \sum \limits _{i=1} ^mx_i - \sum \limits _{i=1} ^mx_iy_i = 0 \\ \Rightarrow k\sum \limits _{i=1} ^mx_i^2 + mb \bar x - \sum \limits _{i=1} ^m x_iy_i = 0 ② \\ ∂k∂L=i=1∑mxi(kxi+b−yi)=0⇒ki=1∑mxi2+bi=1∑mxi−i=1∑mxiyi=0⇒ki=1∑mxi2+mbxˉ−i=1∑mxiyi=0②
记第三行得式子为②
接下来式子①* x ˉ \bar x xˉ得式子③
k m x ˉ 2 + m b x ˉ − m y ˉ x ˉ = 0 ③ km\bar x^2 + mb\bar x - m\bar y \bar x = 0 ③ kmxˉ2+mbxˉ−myˉxˉ=0③
接着,②-③得
k ( ∑ i = 1 m x i 2 − m x ˉ 2 ) = ∑ i = 1 m x i y i − m y ˉ x ˉ ⇒ k = ∑ i = 1 m x i y i − m x ˉ y ˉ ∑ i = 1 m x i 2 − m x ˉ 2 k (\sum \limits _{i=1} ^mx_i^2 - m\bar x^2) = \sum \limits _{i=1} ^m x_iy_i - m\bar y \bar x \\ \Rightarrow k = \frac{\sum \limits _{i=1} ^m x_iy_i - m\bar x \bar y}{\sum \limits _{i=1} ^mx_i^2 - m\bar x^2} k(i=1∑mxi2−mxˉ2)=i=1∑mxiyi−myˉxˉ⇒k=i=1∑mxi2−mxˉ2i=1∑mxiyi−mxˉyˉ
我们现在就求出了使得函数值最小的k, b参数
如今,我们将一元变量推广到多原变量,设多元函数式为
f ( x 1 , x 2 , . . . , x n ) = w 1 x 1 + w 2 x 2 + . . . + w n x n + b f(x_1, x_2, ..., x_n) = w_1x_1 + w_2x_2 + ... +w_nx_n + b f(x1,x2,...,xn)=w1x1+w2x2+...+wnxn+b
这个式子太长了,我们使用线性代数的向量概念对该式进行整理,为方便,记 w 0 = b w_0=b w0=b(可以把上函数式的b视为b*1,下面会讲这样做的原因)
此时稍微提一下,在线性代数中,见到一个向量,默认均为列向量,上标为T(转置)的才为行向量(至于为什么要这样规定,是因为竖着写很占版面…你知道它本身是竖着写的就好了)
那么此时,我们构造一个权重向量 w w w和特征向量 x x x
w = ( w 0 , w 1 , w 2 , . . . , w n ) x = ( 1 , x 1 , x 2 , . . . , x n ) w = (w_0, w_1, w_2, ..., w_n) \\ x = (1, x_1, x_2, ..., x_n) w=(w0,w1,w2,...,wn)x=(1,x1,x2,...,xn)
那么此时,我们上述的多元函数式则可以写成 f ( x ) = w T x f(x) = w^Tx f(x)=wTx或 f ( x ) = x T w f(x) = x^Tw f(x)=xTw,是完全等价的
此时,我们可以损失函数写成如下形式
L ( w ) = ∑ i = 1 m ( y i − w T x ( i ) ) 2 L(w) = \sum \limits _{i=1} ^m(y_i-w^Tx^{(i)})^2 L(w)=i=1∑m(yi−wTx(i))2
其中, y i y_i yi为第i个真实值, x ( i ) x^{(i)} x(i)为第i个样本的特征向量
注:真实值,标签值,样本值这三个词意思是相同的,后续阐述上可能会混用
此时,我们觉得还是觉得式子不够简洁,这个连加符号也太影响观感了!
于是,此时可以继续利用线性代数,把连加号去掉,提升观感,同时也方便后续推导
为了化简,我们需要定义两个东西
①标签向量
将m个样本标签值堆叠成一个标签向量 y y y(再提一遍没有T的是列向量)
y = ( y 1 , y 2 , . . . , y m ) y = (y_1, y_2, ..., y_m) y=(y1,y2,...,ym)
②样本矩阵X
定义样本矩阵X,形状为(m, n+1),m个样本,n+1个特征(其中,第1个特征为1)
( 1 x 1 ( 1 ) x 2 ( 1 ) ⋯ x n ( 1 ) ⋮ ⋮ ⋮ ⋮ ⋮ 1 x 1 ( m ) x 2 ( m ) ⋯ x n ( m ) ) \left( \begin{array}{l} 1 & x_1^{(1)} & x_2^{(1)} & \cdots & x_n^{(1)} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & x_1^{(m)} & x_2^{(m)} & \cdots & x_n^{(m)} \end{array} \right) ⎝⎜⎜⎛1⋮1x1(1)⋮x1(m)x2(1)⋮x2(m)⋯⋮⋯xn(1)⋮xn(m)⎠⎟⎟⎞
这里每一行即是一个样本,每一列即是某一个特征
顺便解释一下上下标:上标(i)代表是第i个样本,下标j代表第j个特征(也可以理解成第j个维度)
那么此时,样本矩阵X乘上权重向量w可得预测值向量 y ^ \hat y y^,如图
我们还需要借助l2范数进行化简,此处简单介绍
l2范数:向量各元素的平方和的平方根,即 ∥ x ∥ 2 = ∑ i = 1 n x i 2 \|x\|_2 = \sqrt{\sum\limits_{i=1}^n x_i^2} ∥x∥2=i=1∑nxi2
|| ||
是范数符号,下标2表示其为2范数。
l2范数有以下公式成立
x T x = ∣ ∣ x ∣ ∣ 2 2 = ∑ i = 1 n x i 2 x^Tx=||x||^2_2=\sum\limits_{i=1}^n x_i^2 xTx=∣∣x∣∣22=i=1∑nxi2
损失函数可写成如下形式
L ( w ) = ∥ X w − y ∥ 2 L(w) = \|Xw-y\|^2 L(w)=∥Xw−y∥2
(如果不懂的话建议多看几遍)
注意矩阵和向量的大小,X:(m, n+1),w:(n+1, 1),y:(m, 1),开始化简
L ( w ) = ∥ X w − y ∥ 2 = ( X w − y ) T ( X w − y ) = ( w T X T − y T ) ( X w − y ) = w T X T X w − w T X T y − y T X w + y T y = w T X T X w − 2 w T X T y + y T y \begin{aligned} L(w) &= \|Xw-y\|^2 \\ &= (Xw-y)^T(Xw-y) \\ &=(w^TX^T -y^T)(Xw-y) \\ &=w^TX^TXw - w^TX^Ty-y^TXw+y^Ty \\ &=w^TX^TXw - 2w^TX^Ty+y^Ty \end{aligned} L(w)=∥Xw−y∥2=(Xw−y)T(Xw−y)=(wTXT−yT)(Xw−y)=wTXTXw−wTXTy−yTXw+yTy=wTXTXw−2wTXTy+yTy
第一行到第二行:利用公式 x T x = ∣ ∣ x ∣ ∣ 2 2 x^Tx=||x||^2_2 xTx=∣∣x∣∣22
第二行到第三行:利用转置的两个运算公式 ( A + B ) T = A T + B T (A+B)^T=A^T+B^T (A+B)T=AT+BT和 ( A B ) T = B T A T (AB)^T=B^TA^T (AB)T=BTAT
第三行到第四行:矩阵满足分配律
第四行到第五行:为什么 w T X T y w^TX^Ty wTXTy和 y T X w y^TXw yTXw可以合并呢?这里就要回归到他们的大小上了
w T w^T wT:(1, n+1), X T X^T XT:(n+1, m), y y y:(m, 1),他们最终相乘的大小是(1, 1),(1, 1)实际上是一个数
y T y^T yT:(1, m), X:(m, n+1),w:(n+1, 1),最终大小也是(1, 1),也是一个数
而 w T X T y w^TX^Ty wTXTy = ( y T X w ) T =(y^TXw)^T =(yTXw)T,而一个实数的转置本就等于其本身,所以这俩是同一个数
∂ L ( w ) ∂ w = ∂ ( w T X T X w − 2 w T X T y + y T y ) ∂ w = ∂ w T X T X w ∂ w − 2 ⋅ ∂ w T X T y ∂ w + 0 = X T X w + X T X w − 2 X T y = 2 X T X w − 2 X T y = 0 ⇒ w = ( X T X ) − 1 X T y \begin{aligned} \frac{\partial L(w)}{\partial w} &= \frac{\partial (w^TX^TXw - 2w^TX^Ty+y^Ty)}{\partial w} \\ &=\frac{\partial w^TX^TXw}{\partial w} - 2\cdot \frac{\partial w^TX^Ty}{\partial w} + 0 \\ &=X^TXw+X^TXw-2X^Ty \\ &=2X^TXw - 2X^Ty = 0 \\ &\Rightarrow w = (X^TX)^{-1}X^Ty \end{aligned} ∂w∂L(w)=∂w∂(wTXTXw−2wTXTy+yTy)=∂w∂wTXTXw−2⋅∂w∂wTXTy+0=XTXw+XTXw−2XTy=2XTXw−2XTy=0⇒w=(XTX)−1XTy
矩阵求导的相关公式参考了该资料:https://zhuanlan.zhihu.com/p/273729929
第二行到第三行的第一个偏导数:
要用到这个公式
此时将 X T X X^TX XTX视为整体,也就是公式里的A,其大小为(n+1, n+1),是常数方阵,符合公式的形式,于是
= X T X w + ( X T X ) T w = X T X w + X T X w =X^TXw+(X^TX)^Tw = X^TXw + X^TXw =XTXw+(XTX)Tw=XTXw+XTXw
第二行到第三行的第二个偏导数:
要用到这个公式
将 X T y X^Ty XTy视为整体,于是
∂ w T X T y ∂ w = X T y \frac{\partial w^TX^Ty}{\partial w} = X^Ty ∂w∂wTXTy=XTy
第四行到第五行为逆矩阵的知识
梯度下降也是线性回归算法的一种求解方式
关于梯度下降,马同学的回答非常直观且详细
https://www.zhihu.com/question/305638940/answer/1639782992
那么,当你看完这个回答后,可以理解,通过求梯度(这里也就是求对每个参数求偏导)和设定一个学习率(步长),经过指定次数迭代后可到达函数取到最小值的点,也就是获取了让误差值最小的权重向量w
关于求L对w的偏导数,最小二乘法时已提及
∂ L ( w ) ∂ w = ∂ ( w T X T X w − 2 w T X T y − y T y ) ∂ w = ∂ w T X T X w ∂ w − 2 ⋅ ∂ w T X T y ∂ w − 0 = X T X w + X T X w − 2 X T y = 2 X T ( X w − y ) \begin{aligned} \frac{\partial L(w)}{\partial w} &= \frac{\partial (w^TX^TXw - 2w^TX^Ty-y^Ty)}{\partial w} \\ &=\frac{\partial w^TX^TXw}{\partial w} - 2\cdot \frac{\partial w^TX^Ty}{\partial w} - 0 \\ &=X^TXw+X^TXw-2X^Ty \\ &=2X^T(Xw - y) \end{aligned} ∂w∂L(w)=∂w∂(wTXTXw−2wTXTy−yTy)=∂w∂wTXTXw−2⋅∂w∂wTXTy−0=XTXw+XTXw−2XTy=2XT(Xw−y)
那么只需要经过多次迭代
w = w − α ∂ L ( w ) ∂ w w= w-\alpha\frac{\partial L(w)}{\partial w} w=w−α∂w∂L(w)
这就是利用梯度下降的线性回归原理