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

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" %f1.order], loc="upper left")
plt.grid
plt.show()

你可能感兴趣的:(机器学习个人笔记)