原理:
定理原文鏈接:https://blog.csdn.net/shenziheng1/article/details/54409180
定理以及證明
實例代碼:
我們在直線 y = 3 + 5x 附近生成服從正態分佈的隨機點,作爲擬合直線的樣本點:
import numpy as np
import matplotlib.pyplot as plt
#在直線附近生成隨機的點
X = np.arange(0,5,0.1)
Z = [3 + 5 * x for x in X]
Y = [np.random.normal(z,0.5) for z in Z]
plt.plot(X,Y,'ro')
plt.show()
我們利用最小二乘法的正則方程組來求解未知係數 a0 與 a1:
def linear_regression(x,y):
N = len(x)
sumx = sum(x)
sumy = sum(y)
sumx2 = sum(x**2)
sumxy = sum(x*y)
A = np.mat([[N,sumx],[sumx,sumx2]])
b = np.array([sumy,sumxy])
return np.linalg.solve(A,b)
a0,a1= linear_regression(X,Y)
print a0,a1
#繪製直線
#繪製直線
_x = [0,5]
_y = [a0+a1*x for x in _x]
plt.plot(X,Y,'ro',_x,_y,'b',linewidth=2)
plt.title("y={}+{}x".format(a0,a1))
plt.show()