公式推导线性回归模型

基本线性回归

   接下来用一个简单的项目代入线性回归模型。

任务定义

   任务描述:使用线性回归模型预测房价。
   数据集:Boston房价数据集,sklearn内置。

数据准备

   数据字段说明:

  • CRIM:各城镇的人均犯罪率
  • ZN:规划地段超过25,000平方英尺的住宅用地比例
  • INDUS:城镇非零售商业用地比例
  • CHAS:是否在查尔斯河边(=1是)
  • NOX:一氧化氮浓度(/千万分之一)
  • RM:每个住宅的平均房间数
  • AGE:1940年以前建造的自住房屋的比例
  • DIS:到波士顿五个就业中心的加权距离
  • RAD:放射状公路的可达性指数
  • TAX:全部价值的房产税率(每1万美元)
  • PTRATIO:按城镇分配的学生与教师比例
  • B:1000(Bk - 0.63)^2其中Bk是每个城镇的黑人比例
  • LSTAT:较低地位人口
  • Price:房价
from sklearn import datasets
boston = datasets.load_boston()     # 返回一个类似于字典的类
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y #输出预测值
boston_data.head()

在这里插入图片描述

模型构建

   回归这个概念是19世纪80年代由英国统计学家郎西斯.高尔顿在研究父子身高关系提出来的,他发现:在同一族群中,子代的平均身高介于父代的身高以及族群的平均身高之间。具体而言,高个子父亲的儿子的身高有低于其父亲身高的趋势,而矮个子父亲的儿子身高则有高于父亲的身高的趋势。也就是说,子代的身高有向族群平均身高"平均"的趋势,这就是统计学上"回归"的最初含义。
   回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。而线性回归就是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w :
   假设:数据集 D = ( x 1 , y 1 ) , . . . , ( x N , y N ) , x i ∈ R p , y i ∈ R , i = 1 , 2 , . . . , N , X = ( x 1 , x 2 , . . . , x N ) T , Y = ( y 1 , y 2 , . . . , y N ) T D=(x_1,y_1),...,(x_N,y_N) ,x_i∈R^p,y_i∈R,i=1,2,...,N ,X=(x_1,x_2,...,x_N)^T,Y=(y_1,y_2,...,y_N)^T D=(x1,y1),...,(xN,yN)xiRp,yiR,i=1,2,...,NX=(x1,x2,...,xN)T,Y=(y1,y2,...,yN)T
   假设X和Y之间存在线性关系,模型的具体形式为
y ^ = f ( w ) = w T x ŷ=f(w)=w^Tx y^=f(w)=wTx
关于公式中将标量化为向量形式,我们可以举例:
y = w 0 + w 1 x 1 + w 2 x 2 y = w_0 + w_1x_1 + w_2x_2 y=w0+w1x1+w2x2
其中, w = [ w 0 w 1 w 2 ] w=\left[ \begin{matrix} w_0 \\ w_1 \\ w_2 \end{matrix} \right] w=w0w1w2 x = [ 1 x 1 x 2 ] x=\left[ \begin{matrix} 1 \\ x_1 \\ x_2 \end{matrix} \right] x=1x1x2
   易化简为:
y = w T x y=w^Tx y=wTx
   举例:现在我们取两个特征 X = x 1 , x 2 X=x_1,x_2 X=x1,x2,假设 Y Y Y X X X存在线性关系, Y = f ( w , X ) Y=f(w,X) Y=f(w,X)构成如下图构成所示的图像。在Boston房价任务的语境下, Y Y Y就是房价Price预测值。而图中的红点,代表了来自于数据集的房价Price真实值
在这里插入图片描述
   显然,我们发现红点到平面的距离代表了预测值和真实值的误差(只是其中一种表现误差的方案)。不妨设误差为 e i 。 e_i。 ei进一步来看,由于点分布与平面的上下,意味着误差有正负。为了做一个类似于归一化的工作,我们有两种方案。

一: ∑ i = 1 N e i 2 \sum_{i=1}^{N}e_i^2 i=1Nei2,将误差平方后求和。

  • 优点:在后续优化中,易通过求导,进而使用梯度下降法。
  • 缺点:平方后,会放大越大的误差,缩小越小的误差。

二: ∑ i = 1 N ∣ e i ∣ \sum_{i=1}^{N}|e_i| i=1Nei,取误差绝对值后求和。

  • 优点:避免放大越大的误差,缩小越小的误差。
  • 缺点:在后续优化中,很难通过求导优化参数,可能需要如模拟退火、遗传算法等智能算法进行优化。(注:遗传算法的理论总结可以看我码得另一篇:传送门~)

   接下来我们将会选择第一种评估误差,也就是我们常用的MSE均方误差。关于均方误差的应用,初学的童鞋可以参考李宏毅老师的宝可梦task,会让你理解为什么我们要用这个东东。作为萌新,我也写了课程笔记:传送门

评估误差(loss函数)

   接下来的脑补对话是我关于loss函数意义的一丢丢思考~
   为什么要评估误差?答:为了寻找最优的参数 W W W,以构造最优的模型。
   参数 W W W是谁?答:在基本的线性回归模型语境下,它就是公式 y ^ = f ( w ) = w T x ŷ=f(w)=w^Tx y^=f(w)=wTx中的 w w w
   难道我们初设的模型不是最优的?答:从某种意义上来说, y y y x x x都是已知量,而 w w w是未知量,实际上model是a set of function,我们需要通过评估模型输出的预测值与数据集给出的真实值的误差,来寻找合适的 w w w,当我们找到了最佳参数,显然由它所构造的 y ^ = f ( w ) = w T x ŷ=f(w)=w^Tx y^=f(w)=wTx就是best function。
   sklearn关于评估的接口文档:地址。简要给出评估公式:

  • MSE均方误差: M S E ( y , y ^ ) = 1 n s a m p l e s ∑ i = 0 n s a m p l e s − 1 ( y i − y ^ i ) 2 MSE(y,ŷ )= \frac{1}{n_{samples}}∑^{n_{samples}−1}_{i=0}(y^i−ŷ ^i)^2 MSE(y,y^)=nsamples1i=0nsamples1(yiy^i)2
  • MAE平均绝对误差: M A E ( y , y ^ ) = 1 n s a m p l e s ∑ i = 0 n s a m p l e s − 1 ∣ y i − y ^ i ∣ MAE(y,ŷ )=\frac{1}{n_{samples}}∑^{n_{samples}−1}_{i=0}|y^i−ŷ ^i| MAE(y,y^)=nsamples1i=0nsamples1yiy^i
  • R2决定系数: R 2 ( y , y ^ ) = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}i)^2}{\sum{i=1}^{n} (y_i - \bar{y})^2} R2(y,y^)=1i=1n(yiyˉ)2i=1n(yiy^i)2
  • 解释方差得分: e x p l a i n e d v a r i a n c e ( y , y ^ ) = 1 − V a r y − y ^ V a r y explainedvariance(y,ŷ )=1−V_{ary}−ŷ V_{ary} explainedvariance(y,y^)=1Varyy^Vary

在上一节,我们提到将使用MSE作为评估指标。
   现在我们如何构造loss函数?给出三种理解角度

最小二乘法角度

   再次提醒:我们需要衡量真实值 y i y_i yi线性回归模型的预测值 w T x i w^Tx_i wTxi之间的差距,在这里我们和使用二范数的平方和L(w)来描述这种差距,即:
L ( w ) = ∑ i = 1 N ∣ ∣ w T x i − y i ∣ ∣ 2 2 = ∑ i = 1 N ( w T x i − y i ) 2 = ( w T X T − Y T ) ( w T X T − Y T ) T = w T X T X w − 2 w T X T Y + Y Y T L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i||_2^2=\sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 = (w^TX^T-Y^T)(w^TX^T-Y^T)^T = w^TX^TXw - 2w^TX^TY+YY^T L(w)=i=1NwTxiyi22=i=1N(wTxiyi)2=(wTXTYT)(wTXTYT)T=wTXTXw2wTXTY+YYT
   现在给出具体推导过程:
L ( w ) = ∑ i = 1 N ( w T x i − y i ) 2 = ( w T x 1 − y 1 ) 2 + ( w T x 2 − y 2 ) 2 + . . . + ( w T x N − y N ) N = ( w T x 1 − y 1 , w T x 2 − y 2 , . . . , w T x N − y N ) [ w T x 1 − y 1 w T x 2 − y 2 ⋮ w T x N − y N ] = [ ( w T x 1 , w T x 2 , . . . , w T x N ) − ( y 1 , y 2 , . . . , y N ) ] [ [ w T x 1 w T x 2 ⋮ w T x N ] − [ y 1 y 2 ⋮ y N ] ] = ( w T X T − Y T ) ( w T X T − Y T ) T = w T X T X w − Y T X w − w T X T Y + Y T Y L(w) = \sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 =(w^Tx_1-y_1)^2+(w^Tx_2-y_2)^2+...+(w^Tx_N-y_N)^N \\ = (w^Tx_1-y_1,w^Tx_2-y_2,...,w^Tx_N-y_N)\left[ \begin{matrix} w^Tx_1-y_1 \\ w^Tx_2-y_2 \\ \vdots \\ w^Tx_N-y_N \end{matrix} \right] \\ =[(w^Tx_1,w^Tx_2,...,w^Tx_N)-(y_1,y_2,...,y_N)][\left[ \begin{matrix} w^Tx_1 \\ w^Tx_2 \\ \vdots \\ w^Tx_N \end{matrix} \right] - \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_N \end{matrix} \right]] \\ =(w^TX^T-Y^T)(w^TX^T-Y^T)^T \\ =w^TX^TXw-Y^TXw-w^TX^TY+Y^TY L(w)=i=1N(wTxiyi)2=(wTx1y1)2+(wTx2y2)2+...+(wTxNyN)N=(wTx1y1,wTx2y2,...,wTxNyN)wTx1y1wTx2y2wTxNyN=[(wTx1,wTx2,...,wTxN)(y1,y2,...,yN)][wTx1wTx2wTxNy1y2yN]=(wTXTYT)(wTXTYT)T=wTXTXwYTXwwTXTY+YTY
其中, Y T X w Y^TXw YTXw w T X T Y w^TX^TY wTXTY都是一个实数(可以设 w w w X X X Y Y Y的维度分别为n x 1n x nn x 1,代入计算即可证明),对于实数 a a a a T = a a^T = a aT=a,即 Y T X w = ( Y T X w ) T = w T X T Y Y^TXw = (Y^TXw)^T = w^TX^TY YTXw=(YTXw)T=wTXTY。同理, Y T Y = ( Y T Y ) T = Y Y T Y^TY=(Y^TY)^T=YY^T YTY=(YTY)T=YYT。因此,继续化简得到最终结果:
L ( w ) = w T X T X w − 2 w T X T Y + Y Y T L(w) =w^TX^TXw - 2w^TX^TY+YY^T L(w)=wTXTXw2wTXTY+YYT
   因此,我们需要找到使得 L ( w ) L(w) L(w)最小时对应的参数 w w w,即:
w ^ = a r g   min ⁡ L ( w ) \hat{w} = arg\, \min L(w) w^=argminL(w)
为了达到求解最小化 L ( w ) L(w) L(w)问题,我们应用高等数学的知识,使用求导来解决这个问题:
  ∂ L ( w ) ∂ w = 2 X T X w − 2 X T Y = 0 \ \frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0  wL(w)=2XTXw2XTY=0
得到
X T X w = X T Y X^TXw=X^TY XTXw=XTY
等式两边同时左乘 ( X T X ) − 1 (X^TX)^{-1} (XTX)1,化简得到
w ^ = ( X T X ) − 1 X T Y \hat{w} = (X^TX)^{-1}X^TY w^=(XTX)1XTY
注意:此时,假设 ( X T X ) (X^TX) (XTX)可逆。如果不能求逆,这就涉及到最优化中的对偶问题啦~这里暂时不做深入探讨,烦请谅解。而在实际应用中,求逆和求导是一件非常难的事情,那如何得到最优参数 w w w呢?可以使用梯度下降法,我们不需要直接令偏导为0,而是仅通过求一阶偏导组成的梯度,辅以学习率,一步一步接近最优结果(但愿~)。

线性代数角度

   还可以从线性代数的角度理解评估误差。比如,我们依旧按照上图给出的假设:取两个特征 X = x 1 , x 2 X=x_1,x_2 X=x1,x2,假设 Y Y Y X X X存在线性关系, Y = f ( w , X ) Y=f(w,X) Y=f(w,X)构成图像。请大家切换到向量的思维方式,此时,真实值(也就是那个红点点~)用向量表示,相当于从原点出发到达该红点,也就是下图的红 y y y箭头。而向量 y y y到由 X = x 1 , x 2 X=x_1,x_2 X=x1,x2组成的平面的距离,相当于真实值和预测值的误差。那么这个距离就是平面的法向量,即图示的2⃣️。显然,根据向量加法,我们还需要求得向量1⃣️。我们发现向量1⃣️就是由 x 1 x_1 x1 x 2 x_2 x2线性组合,我们不妨设向量1⃣️为 w 1 x 1 + w 2 x 2 = X w w_1x_1+w_2x_2=Xw w1x1+w2x2=Xw,因此法向量2⃣️可以表示为
Y − X w Y - Xw YXw
又因为法向量与 X = x 1 , x 2 X=x_1,x_2 X=x1,x2的平面垂直,所以根据 < a , b > = a ⋅ b = a T b = 0 <a,b>= a·b=a^Tb= 0 <a,b>=ab=aTb=0得到:
X T ( Y − X w ) = 0 X^T(Y - Xw)=0 XT(YXw)=0
即:
w = ( X T X ) − 1 X T Y w=(X^TX)^{-1}X^TY w=(XTX)1XTY

在这里插入图片描述

数理统计角度

  假设存在噪声 ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0,\sigma^2) ϵN(0,σ2),则 y i = f ( w , x i ) + ϵ i y_i=f(w,x_i)+\epsilon_i yi=f(w,xi)+ϵi,如下图所示。
在这里插入图片描述
此时有n个样本,每个样本概率为 P ( y i ∣ x i ; w ) P(y_i|x_i;w) P(yixi;w),由于 ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0,\sigma^2) ϵN(0,σ2) P ( y i ∣ x i ; w ) = P ( w T x i + ϵ i ) P(y_i|x_i;w)=P(w^Tx_i + \epsilon_i) P(yixi;w)=P(wTxi+ϵi) ,因此根据正态分布性质, y i ∣ x i ∼ N ( w T x , σ 2 ) y_i|x_i \sim N(w^Tx,\sigma^2) yixiN(wTx,σ2)。( w T x i w^Tx_i wTxi是常数,与 ϵ \epsilon ϵ累加使得均值发生偏移)
  现在利用极大似然估计对参数 w w w进行估计:
L ( w ) = l o g P ( Y ∣ X ; w ) = l o g ∏ i = 1 N P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g ( 1 2 π σ e x p ( − ( y i − w T x i ) 2 2 σ 2 ) ) = ∑ i = 1 N [ l o g ( 1 2 π σ ) − 1 2 σ 2 ( y i − w T x i ) 2 ] a r g   max ⁡ w L ( w ) = a r g   min ⁡ w [ l ( w ) = ∑ i = 1 N ( y i − w T x i ) 2 ] L(w)=log P(Y|X;w)=log∏_{i=1}^NP(y_i|x_i;w)=∑_{i=1}^NlogP(y_i|x_i;w) =∑_{i=1}^Nlog(\frac{1}{\sqrt{2πσ}}exp(−\frac{(y_i−w^Tx_i)^2}{2σ^2}))=∑_{i=1}^N[log(\frac{1}{\sqrt{2πσ}})−\frac{1}{2σ^2}(y_i−w^Tx_i)^2] \\ arg\, \max_wL(w)=arg\, \min_w[l(w)=∑_{i=1}^N(y_i−w^Tx_i)^2] L(w)=logP(YX;w)=logi=1NP(yixi;w)=i=1NlogP(yixi;w)=i=1Nlog(2πσ 1exp(2σ2(yiwTxi)2))=i=1N[log(2πσ 1)2σ21(yiwTxi)2]argwmaxL(w)=argwmin[l(w)=i=1N(yiwTxi)2]
又回到了最初的起点~与线性回归的最小二乘估计一致!
在这里插入图片描述
  总结:线性回归的最小二乘估计<==>噪声 ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0,\sigma^2) ϵN(0,σ2)的极大似然估计。

优化方案(梯度下降)

  接下来给出一种优化loss函数的方案:基本的梯度下降法~参考李宏毅老师的宝可梦task实例。
  假设我们得到了优化等式:
f ∗ = a r g   min ⁡ f L ( f ) w ∗ , b ∗ = a r g   min ⁡ w , b L ( w , b ) = a r g   min ⁡ w , b ∑ n = 1 N ( y ^ n − ( b + w ⋅ x c p n ) ) 2 f^* = arg\, \min_{f} L(f) \\ w^*,b^*= arg\, \min_{w,b} L(w,b) = arg\, \min_{w,b} \sum_{n=1}^{N}(\hat{y}^n - (b + w·x_{cp}^n))^2 f=argfminL(f)w,b=argw,bminL(w,b)=argw,bminn=1N(y^n(b+wxcpn))2
此时我们该如何优化它?搬出我们大名鼎鼎的Gradient Descent,又名梯度下降法。关于梯度可以看本人总结的另一篇——机器学习高等数学基础——多元微分总结。这里我们直接阐述优化过程。

Task1:只有一个参数w

  此时等式变为:
w ∗ = a r g   min ⁡ w L ( w ) w^* = arg\, \min_{w} L(w) w=argwminL(w)

  1. 随机选取初始点 w 0 w^0 w0

  2. 计算 d L d w ∣ w = w 0 \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^0} dwdLw=w0
    在这里插入图片描述
    更新函数点:
    w 1 ←   w 0 − η d L d w ∣ w = w 0 w^1 \leftarrow \, w^0 - \eta \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^0} w1w0ηdwdLw=w0
    在这里插入图片描述

  3. 计算 d L d w ∣ w = w 1 \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^1} dwdLw=w1
    在这里插入图片描述
    更新函数点:
    w 2 ←   w 1 − η d L d w ∣ w = w 1 w^2 \leftarrow \, w^1 - \eta \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^1} w2w1ηdwdLw=w1

  4. 以此类推,迭代。直到找到loss函数最小值处,算法结束。

Task2:有两个参数w和b
  1. 随机选取初始点 w 0 w^0 w0 b 0 b^0 b0
  2. 计算 ∂ L ∂ w ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial w}|_{w = w^0,b=b^0} wLw=w0,b=b0 ∂ L ∂ b ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial b}|_{w = w^0,b=b^0} bLw=w0,b=b0
    更新函数点:
    w 1 ←   w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 b 1 ←   b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 w^1 \leftarrow \, w^0 - \eta \frac{\partial L}{\partial w}|_{w = w^0,b=b^0} \\ b^1 \leftarrow \, b^0 - \eta \frac{\partial L}{\partial b}|_{w = w^0,b=b^0} w1w0ηwLw=w0,b=b0b1b0ηbLw=w0,b=b0
  3. 以此类推,迭代。直到找到loss函数最小值处,算法结束。

在这里插入图片描述

总结

  梯度公式:
∇ L = [ ∂ L ∂ w ∂ L ∂ b ] \nabla L = \left[ \begin{matrix} \frac{\partial L}{\partial w} \\ \frac{\partial L}{\partial b}\end{matrix} \right] L=[wLbL]

  优化方向如图所示:
在这里插入图片描述

代码

   调用sklearn中的linear_model.LinearRegression()接口,这里来说明linear_model.LinearRegression()接口:地址

from sklearn import linear_model      # 引入线性回归方法
lin_reg = linear_model.LinearRegression()       # 创建线性回归的类
lin_reg.fit(X,y)        # 输入特征X和因变量y进行训练
print("模型系数:",lin_reg.coef_)             # 输出模型的系数W
print("模型得分:",lin_reg.score(X,y))    # 输出模型的决定系数R^2

在这里插入图片描述

参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值