Python实现——⼆元线性回归(最⼩⼆乘法)
2019/3/30
⼆元线性回归——矩阵公式法⼜名:对于python科学库的糟⼼尝试
⼆元线性回归严格意义上其实不过是换汤不换药,我对公式进⾏推导,其实也就是跟以前⼀样的求偏导并使之为零,并且最终公式的严格推导我⼤概也只能说是将将理解,毕竟最初的矩阵⼀开始都不太清楚应该是什么样⼦的,其中,Coursera的课程起到了⾮常显著的帮助。
其实这个部分我并不想写太多,因为理解并不是⼗分透彻,总体来讲,感觉就是⼀个公式的事情,其中对于python数据类型以及python库函数的使⽤反⽽耗费的时间更多,回头来更新。
python库函数的运⽤⾮常重要,也是卡住我好久的主要原因,其次,对于python⼏种数据结构类型也让我⼗分苦恼,毕竟我不太清楚⼤部分函数会返回给我什么样的结果。
其中最终的公式应该说是⾮常普及了,随便的搜索便可查到,虽然花了这么⼤的功夫,最终带给我的印象却是远远不及梯度下降的那种循序渐进看着计算机⼀步步探索来的深刻。
然⽽,这不正是前⼈的努⼒所要想做到的⼀步到位的⽅式吗?
虽然是真真正正的计算公式,但是若是⾯对特殊的矩阵情况或者过⼤的矩阵,这个⽅法也是⼒不从⼼的,详情我不多赘述,毕竟我还是个没有系统学习线代概率的⾚脚蒟蒻。
先这样,或许会再来更新吧。
以下是利⽤Coursera提供的部分数据进⾏的实现图像:
这⾥给出完整代码:
import xlrd
import sympy as sp
import xlwt
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
workbook=xlrd.open_workbook(r'dataset.xlsx')
sheet=workbook.sheet_by_index(0)
l_values(0)
l_values(1)
l_values(2)
#Axes3D
fig = plt.figure()
ax = Axes3D (fig)
ax.scatter(X1, X2, Y1)
#H为100*3矩阵,读⼊现有数据,第0列为1
H=[]
for i in range(100):
values=[]
values.append(1)
values.append(X1[i])
values.append(X2[i])
H.append(values)
#将H0数组化
H0 = np.array(H)
#H1为H的转置矩阵
H1=np.array(H0).T
H2=H1@H0
#求逆矩阵
H3=np.linalg.inv(H2)
#最终结果计算
temp=H3@H1@Y1
temp=np.mat(temp)
w0=temp[0,0]
正则化的最小二乘法曲线拟合pythonw1=temp[0,1]
w2=temp[0,2]
#⽣成两坐标轴取点
x1=np.linspace(0,5000,100)
x2=np.linspace(0,5,100)
#将两坐标轴点合成
x1, x2 = np.meshgrid(x1, x2)
#结果⽅程,并输出最终结果图
#z=w0+w1*x1+w2*x2
ax.plot_surface(x1,x2,w0+w1*x1+w2*x2) plt.show()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。