最小二乘法第一步就是找出最小误差进行优化,误差公式如下
, 意思就是用每一个样本点的因变量减去要拟合函数的因变量(这个因变量由传入样本点X得到)的平方累加。
为leastsq(func, x0, args=())
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
def func(p,x): #要拟合的数据
k,b=p
return k*x+b
def wayerror(p,x,y,s): #误差计算方法
print(s)
return func(p, x) - y
if __name__ == '__main__':
X = np.array([5.19, 2.12, 6.39, 8.71, 4.7, 2.66, 6.78])
Y = np.array([6.01, 2.78, 4.47, 5.71, 4.1, 4.23, 4.05])
s = "绘制样例点成功"
P = leastsq(wayerror, [1, 1], args=(X, Y, s))
k, b = P[0]
print("k=", k, '\n', "b=", b)
plt.scatter(X, Y, color="blue", label="Sample Point", linewidth=3) # 绘制散点图
x = np.linspace(0, 10, 1000)
y = k * x + b
plt.plot(x, y, color="red", label="Desination Line", linewidth=2) # 绘制拟合直线
plt.legend()
plt.show()