0
点赞
收藏
分享

微信扫一扫

机器学习:从公式推导到代码实现多元线性回归

有点d伤 2022-03-11 阅读 149

机器学习:从公式推导到代码实现多元线性回归


前面我们已经讨论过一元线性回归没如果大家对这个看的比较晦涩,可以查看前置内容: 机器学习:从公式推导到代码实现一元线性回归

多元线性回归

我认为多元线性回归与一元线性回归本质上是一样的,一元线性回归可以看成数据特征维度为1的多元线性回归,而多元主要体现在数据维度的多样性,比如说房价预测,决定房价的因素有很多(比如,位置,新旧,大小。。。等)。

求解过程

设DataSet:={(x1,y1),(x2,y2),(x3,y3)…(xn,yn))},其中 x i ∈ R p xi \in R^p xiRp y i ∈ R yi \in R yiR,也就是说X= ( x 1 , x 2 , x 3..... x n ) T (x1,x2,x3.....xn)^T x1,x2,x3.....xnT,其中这里,每个元素x
都是一个p维的列向量,我们继续化简,X= [ x 11 x 12 . . . x 1 p x 21 x 22 . . . x 2 p . . . . . . x n 1 x n 2 . . . x n p ] (1) \left[ \begin{matrix} x_{11} & x_{12} &... x_{1p} \\ x_{21} & x_{22} &... x_{2p} \\ \\...... \\x_{n1} & x_{n2} &... x_{_{np}} \end{matrix} \right]\tag{1} x11x21......xn1x12x22xn2...x1p...x2p...xnp(1)
Y= [ y 1 y 2 . . . . . . y n ] (2) \left[ \begin{matrix} y_{1} \\ y_{2} \\ \\...... \\y_n \end{matrix} \right]\tag{2} y1y2......yn(2)
W= [ w 1 w 2 . . . . . . w p ] (3) \left[ \begin{matrix} w_{1} \\ w_{2} \\ \\...... \\w_p \end{matrix} \right]\tag{3} w1w2......wp(3)
我们假设Y与X的线性关系为f(xi)= W T ∗ x i + b W^T*xi+b WTxi+b,这里W,b为参数,为了方便后续计算,我们偏执项b与W合为一体,写成W=(W;b),那么X也就变成了

X= [ x 11 x 12 . . . x 1 p 1 x 21 x 22 . . . x 2 p 1 . . . . . . x n 1 x n 2 . . . x n p 1 ] (4) \left[ \begin{matrix} x_{11} & x_{12} &... x_{1p} &1 \\ x_{21} & x_{22} &... x_{2p} &1 \\ \\...... \\x_{n1} & x_{n2} &... x_{np} &1 \end{matrix} \right]\tag{4} x11x21......xn1x12x22xn2...x1p...x2p...xnp111(4)
W= [ w 1 w 2 . . . . . . w n b ] (5) \left[ \begin{matrix} w_{1} \\ w_{2} \\ \\...... \\w_n \\b \end{matrix} \right]\tag{5} w1w2......wnb(5)

所以我们把假设函数写成 f ( x i ) = W T ∗ x i f(x_i)=W^T*x_i f(xi)=WTxi,我们的目的是找到一条直线,使这条直线的距离到每个每个坐标点的距离最小,这也就是最小二乘估计的核心思想,所以我们可以把Cost Function写成

L ( W ) = ( f ( ϵ i ) − y i ) 2 L(W)=(f(\epsilon_i)-y_i)^2 L(W)=(f(ϵi)yi)2

这里之所以用平方,如果没有平方,Cost Fuction可能为负值,如果为负,这样就不利于我们对真实值与预测值差距多少的判断,这样我们会有一个疑问,我们可以不用均方误差,直接加上一个绝对值就可以保证代价函数的值域大于等于0,答案显然是不可以的,因为绝对值函数不能保证在整个定义域上>=0,所以最终采用均方误差,这个代价函数也可以用最小二乘估计推出来,我们下一节在做讨论。
在这里插入图片描述
最终代价函数被定义为 L ( ϵ i ) = ∑ i = 1 n ( f ( ϵ i ) − y i ) 2 L(\epsilon_i)=\sum_{i=1}^{n}(f(\epsilon_i)-y_i)^2 L(ϵi)=i=1n(f(ϵi)yi)2,我们想要得到最优解,也就是代价函数最小,我们对这个优化函数继续化简,
L ( W ) = ∑ i = 1 n ( f ( ϵ i ) − y i ) 2 L(W)=\sum_{i=1}^{n}(f(\epsilon_i)-y_i)^2 L(W)=i=1n(f(ϵi)yi)2

L ( W ) = ∑ i = 1 n ( W T ∗ ϵ i − y i ) 2 L(W)=\sum_{i=1}^{n}(W^T*\epsilon_i-y_i)^2 L(W)=i=1n(WTϵiyi)2

L ( W ) = L(W)= L(W)=
[ W T ∗ ϵ 1 − y 1 W T ∗ ϵ 2 − y 2 . . . . . . W T ∗ ϵ n − y n b ] ∗ [ W T ∗ ϵ 1 − y 1 W T ∗ ϵ 2 − y 2 . . . W T ∗ ϵ n − y n 1 ] \left[ \begin{matrix} W^T*\epsilon_1-y_1 \\ W^T*\epsilon_2-y_2 \\ \\...... \\W^T*\epsilon_n-y_n \\b \end{matrix} \right]* \left[ \begin{matrix} W^T*\epsilon_1-y_1 & W^T*\epsilon_2-y_2 &...&W^T*\epsilon_n-y_n &1 \\ \end{matrix} \right] WTϵ1y1WTϵ2y2......WTϵnynb[WTϵ1y1WTϵ2y2...WTϵnyn1]
通过化简得到:
L ( W ) = ( W T ∗ X T − Y T ) ∗ ( X ∗ W − Y ) L(W)=(W^T*X^T-Y^T)*(X*W-Y) L(W)=WTXTYT(XWY)

L ( W ) = W T ∗ X T ∗ X ∗ W − W T ∗ X T ∗ Y − Y T ∗ X ∗ W − Y T ∗ Y L(W)=W^T*X^T*X*W-W^T*X^T*Y-Y^T*X*W-Y^T*Y L(W)=WTXTXWWTXTYYTXWYTY

然后我们通过矩阵乘法的运算性质,我们可以得出这四项都是一个一维的常数,其中第二项于第三项互为转置,可以化简得(如果大家忘记了矩阵运算法则,下图以给出性质):

L ( W ) = W T ∗ X T ∗ X ∗ W − 2 ∗ W T ∗ X T ∗ Y − − Y T ∗ Y L(W)=W^T*X^T*X*W-2*W^T*X^T*Y--Y^T*Y L(W)=WTXTXW2WTXTYYTY
在这里插入图片描述
为了使代价函数最小,我们对其求导数,这里矩阵求导过程以省略,
W ∗ = a r g m i n ( L ( W ) ) W^*=argmin(L(W)) W=argmin(L(W))

W ∗ = ( X T ∗ X − 1 ) ∗ X T ∗ Y W^*=(X^T*X^{-1})*X^T*Y W=(XTX1)XTY

代码

import numpy as np  
import pandas as pd  
import statsmodels.api as sm
file = r'C:\Users\data.xlsx'  
data = pd.read_excel(file)  
data.columns = ['y', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9'] 
x = sm.add_constant(data.iloc[:,1:]) #生成自变量  
y = data['y'] #生成因变量  
model = sm.OLS(y, x) #生成模型  
result = model.fit() #模型拟合  
result.summary() #模型描述  
举报

相关推荐

0 条评论