相對於不是很大的數據來說,正規方程相對於梯度下降運算更加的簡便
直接上核心公式
代碼實現:
import numpy as np import matplotlib.pyplot as plt x=[[400],[450],[484],[500],[510],[525],[540],[549],[558],[590],[610],[640],[680],[750],[900]] y=[[80],[89],[92],[102],[121],[160],[180],[189],[199],[203],[247],[250],[259],[289],[356]] plt.plot(x,y,'ks') end=[[0],[0]] for i in range(len(x)): x[i].insert(0,1) x=np.mat(x)#轉成矩陣 y=np.mat(y) end=np.mat([0,0]) end=end.T#矩陣轉逆 end=(x.T*x).I*x.T*y end=end.getA().tolist()#矩陣轉成列表 print(end) X=[400,900] Y=[] Y.append(end[0][0]+end[1][0]*X[0]) Y.append(end[0][0]+end[1][0]*X[1]) plt.plot(X,Y,'g-') plt.show()
結果
[[-173.50754254952682], [0.6238329654896275]]