使用scipy实现最小二乘法,以及通过曲线对数据进行拟合(Python)

xiaoxiao2021-02-28  102

SciPy函数库在NumPy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等等。提供了基于数组是算法级应用 矩阵运算,线性代数 最优化方法,聚类 空间运算,快速傅里叶变换。

import scipy as sp data = sp.genfromtxt('data/web_traffic.tsv',delimiter="\t") # print(data.shape)# 读取数组长度 x= data[:,0]#训练数据集 y= data[:,1] #输出数据 sp.sum(sp.isnan(y))# 显示无效值 x = x[~sp.isnan(y)] # 对数组取反 只选择合法项 y = y[~sp.isnan(y)] 最小二乘法函数 def error(f, x, y): return sp.sum((f(x) - y) ** 2)

根据数据生成N阶曲线

fp1, res, rank, sv, rcond = sp.polyfit(x, y, 1, full=True) #生成一阶曲线 f1=sp.poly1d(fp1) f2p =sp.polyfit(x,y,2) # 2阶曲线 f2=sp.poly1d(f2p)

。。。。。

通过matplotlib画出数据的拟合曲线

import matplotlib.pyplot as plt plt.scatter(x,y) plt.xlabel(u"时间") plt.ylabel(u"点击/小时") plt.xticks( [w * 7 * 24 for w in range(10)], [u'周 %i' % w for w in range(10)]) plt.autoscale(tight=True) fx=sp.linspace(0,x[-1],1000) plt.plot(fx,f3(fx),linewidth=4) plt.legend(["d=%i"
转载请注明原文地址: https://www.6miu.com/read-79390.html

最新回复(0)