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

机器学习:从公式推导到实现单变量线性回归的代码

多元线性回归

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

解法

设DataSet:={(x1,y1),(x2,y2),(x3,y3)…(xn,yn))},其中xi%20%5Cin%20R%5Epyi%20%5Cin%20R,也就是说X=%EF%BC%88x1%2Cx2%2Cx3.....xn%EF%BC%89%5ET,其中这里,每个元素x
都是一个p维的列向量,我们继续化简,X=%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20x_%7B11%7D%20%26%20x_%7B12%7D%20%26...%20x_%7B1p%7D%20%5C%5C%20x_%7B21%7D%20%26%20x_%7B22%7D%20%26...%20x_%7B2p%7D%20%5C%5C%20%5C%5C......%20%5C%5Cx_%7Bn1%7D%20%26%20x_%7Bn2%7D%20%26...%20x_%7B_%7Bnp%7D%7D%20%5Cend%7Bmatrix%7D%20%5Cright%5D%5Ctag%7B1%7D
Y=%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20y_%7B1%7D%20%5C%5C%20y_%7B2%7D%20%5C%5C%20%5C%5C......%20%5C%5Cy_n%20%5Cend%7Bmatrix%7D%20%5Cright%5D%5Ctag%7B2%7D
W=%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20w_%7B1%7D%20%5C%5C%20w_%7B2%7D%20%5C%5C%20%5C%5C......%20%5C%5Cw_p%20%5Cend%7Bmatrix%7D%20%5Cright%5D%5Ctag%7B3%7D
我们假设Y与X的线性关系为f(xi)=W%5ET%2Axi%2Bb,这里W,b为参数,为了方便后续计算,我们偏执项b与W合为一体,写成W=(W;b),那么X也就变成了

X=%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20x_%7B11%7D%20%26%20x_%7B12%7D%20%26...%20x_%7B1p%7D%20%261%20%5C%5C%20x_%7B21%7D%20%26%20x_%7B22%7D%20%26...%20x_%7B2p%7D%20%261%20%5C%5C%20%5C%5C......%20%5C%5Cx_%7Bn1%7D%20%26%20x_%7Bn2%7D%20%26...%20x_%7Bnp%7D%20%261%20%5Cend%7Bmatrix%7D%20%5Cright%5D%5Ctag%7B4%7D
W=%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20w_%7B1%7D%20%5C%5C%20w_%7B2%7D%20%5C%5C%20%5C%5C......%20%5C%5Cw_n%20%5C%5Cb%20%5Cend%7Bmatrix%7D%20%5Cright%5D%5Ctag%7B5%7D

所以我们把假设函数写成f%28x_i%29%3DW%5ET%2Ax_i,我们的目的是找到一条直线,使这条直线的距离到每个每个坐标点的距离最小,这也就是最小二乘估计的核心思想,所以我们可以把Cost Function写成

L%28W%29%3D%28f%28%5Cepsilon_i%29-y_i%29%5E2

这里之所以用平方,如果没有平方,Cost Fuction可能为负值,如果为负,这样就不利于我们对真实值与预测值差距多少的判断,这样我们会有一个疑问,我们可以不用均方误差,直接加上一个绝对值就可以保证代价函数的值域大于等于0,答案显然是不可以的,因为绝对值函数不能保证在整个定义域上>=0,所以最终采用均方误差,这个代价函数也可以用最小二乘估计推出来,我们下一节在做讨论。
机器学习:从公式推导到实现多元线性回归的代码
最终的代价函数定义为L%28%5Cepsilon_i%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28f%28%5Cepsilon_i%29-y_i%29%5E2,我们要得到最优解,即代价函数最小,我们继续简化这个优化函数,
L%28W%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28f%28%5Cepsilon_i%29-y_i%29%5E2

L%28W%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%28W%5ET%2A%5Cepsilon_i-y_i%29%5E2

L%28W%29%3D
%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20W%5ET%2A%5Cepsilon_1-y_1%20%5C%5C%20W%5ET%2A%5Cepsilon_2-y_2%20%5C%5C%20%5C%5C......%20%5C%5CW%5ET%2A%5Cepsilon_n-y_n%20%5C%5Cb%20%5Cend%7Bmatrix%7D%20%5Cright%5D%2A%20%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20W%5ET%2A%5Cepsilon_1-y_1%20%26%20W%5ET%2A%5Cepsilon_2-y_2%20%26...%26W%5ET%2A%5Cepsilon_n-y_n%20%261%20%5C%5C%20%5Cend%7Bmatrix%7D%20%5Cright%5D
通过简化我们得到:
L%28W%29%3D%EF%BC%88W%5ET%2AX%5ET-Y%5ET%EF%BC%89%2A%28X%2AW-Y%29

L%28W%29%3DW%5ET%2AX%5ET%2AX%2AW-W%5ET%2AX%5ET%2AY-Y%5ET%2AX%2AW-Y%5ET%2AY

那么,通过矩阵乘法的运算性质,我们可以得出这四项都是一维常数,其中第二项和第三项相互转置,可以简化(如果忘了矩阵算法,下图给出属性):

L%28W%29%3DW%5ET%2AX%5ET%2AX%2AW-2%2AW%5ET%2AX%5ET%2AY--Y%5ET%2AY
机器学习:从公式推导到实现多元线性回归的代码
为了最小化代价函数,我们取它的导数,这里省略了矩阵求导过程,
W%5E%2A%3Dargmin%28L%28W%29%29

W%5E%2A%3D%28X%5ET%2AX%5E%7B-1%7D%29%2AX%5ET%2AY

代码

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() #模型描述  

版权声明:本文为博主日常自然卷原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_18555105/article/details/123218213

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月3日
下一篇 2022年3月3日

相关推荐