polyfit()函数可以使用最小二乘法将一些点拟合到曲线。numpy.polyfit(x,y,deg,rcond=None,full=False,w=None,cov=False)#x:待拟合点的横坐标#y:待拟合点的纵坐标#deg:免费学位。例如:自由度为2,则拟合曲线为二次函数;如果自由度为3,则拟合曲线为3次函数。轴刻度负号乱码plt.rcParams['axes.unicode_minus']=False#解决中文乱码问题plt.rcParams['font.sans-serif']=['Simhei']importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(-1,1,0.02)y=2*np.sin(x*2.3)+np.random.rand(len(x))然后打印出来看plt.scatter(x,y)plt.show()然后使用polyfit函数将这些点拟合成一条三次曲线parameter=np.polyfit(x,y,3)输出的结果就是三次方程的参数,我们可以将方程拼接如下y2=parameter[0]*x**3+parameter[1]*x**2+parameter[2]*x+parameter[3]打印拟合结果plt.scatter(x,y)plt.plot(x,y2,color='g')plt.show()也可以使用poly1d()函数来帮助我们拼接方程,结果是一样的p=np.poly1d(parameter)plt.scatter(x,y)plt.plot(x,p(x),color='g')plt.show()评价指标R平方二维散点对任意函数进行最小二乘拟合最小平方中相关系数与R平方的关系是派生的。其中,相关系数矩阵是用计算R平方correlation=np.corrcoef(y,y2)[0,1]#相关系数correlation**2#R平方先看poly1d函数的输出结果p=np.poly1d(parameter,variable='x')print(p)这里是把结果输出成两行,但是输出成两行很不方便。尝试自己写一个函数,让输出变成一行pparameter=[-2.44919641,-0.01856314,4.12010434,0.47296566]#coefficientaa=''deg=3foriinrange(deg+1):bb=round(parameter[i],2)#bb是i-time系数ifbb>=0:ifi==0:bb=str(bb)else:bb='+'+str(bb)else:bb=''+str(bb)ifdeg==i:aaaa=aa+bbelse:aaaa=aa+bb+'x^'+str(deg-i)print(aa)封装成函数defCurve_Fitting(x,y,deg):parameter=np.polyfit(x,y,deg)#拟合度deg多项式p=np.poly1d(parameter)#fittingdegdegreedegreepolynomialaa=''#equationsplicing———————————————————foriinrange(deg+1):bb=round(parameter[i],2)ifbb>0:ifi==0:bb=str(bb)else:bb='+'+str(bb)else:bb=str(bb)ifdeg==i:aaaa=aa+bbelse:aaaa=aa+bb+'x^'+str(deg-i)#方程拼接————————————————————————plt.scatter(x,y)#原图数据散点图plt.plot(x,p(x),color='g')#绘制拟合曲线#plt.text(-1,0,aa,fontdict={'size':'10','color':'b'})plt.legend([aa,round(np.corrcoef(y,p(x))[0,1]**2,2)])#拼接方程和R方块放置在传说中显示()#打印('曲线的方程是:',aa)#print('r^2是:',round(np.corrcoef(y,p(x))[0,1]**2,2))使用封装函数RedrawCurve_Fitting(x,y,3)
