- 首先给出一个简单的示例
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1., 2., 3., 4., 5.])
y = np.array([1., 3., 2., 3., 5.])
plt.scatter(x,y)
plt.show()
效果:
可以清楚看到点的分布情况,接下来我们尝试寻找一条合适的拟合曲线,拟合出这些点的分布情况,并且做出图,我们要寻找的拟合曲线为:
y=ax+b,其中a,b是未知数,根据公式我们求出a,b为:
接下来我们代码实现(由数据推算出a,b)
num=0.0#a的分母和
d=0 #a的分子和
x_mean=np.mean(x)#a的均值
y_mean=np.mean(y)#b的均值
for x_i,y_i in zip(x,y):
num+=(x_i-x_mean)*(y_i-y_mean)
d+=(x_i-x_mean)**2
a=num/d#a的值(根据公式)
b=y_mean-a*x_mean#b的值
y_predict=a*x+b#拟合曲线的公式
plt.scatter(x,y)#散点
plt.plot(x,y_predict,color="r")#拟合曲线
plt.show()
效果:
x_predict=6
y_predict=a*x_predict+b
y_predict
5.2