最小二乘法
来源:互联网 发布:visio2010软件下载 编辑:程序博客网 时间:2024/06/05 06:39
关于公式推导可以参考这篇文章,还配了代码,不过代码只是实现了公式5的部分,而且代码循环有点多,稍微修改了一下。
http://blog.csdn.net/jairuschan/article/details/7517773/
# coding=utf-8import matplotlib.pyplot as pltimport mathimport numpyimport randomfig = plt.figure()ax = fig.add_subplot(111)#阶数为9阶order=9#ground truth曲线x = numpy.arange(-1,1,0.02)y = [((a*a-1)*(a*a-1)*(a*a-1)+0.5)*numpy.sin(a*2) for a in x]ax.plot(x,y,color='r',linestyle='-',marker='')#加入噪声i=0xa=[]ya=[]for xx in x: yy=y[i] d=float(random.randint(60,140))/100 #ax.plot([xx*d],[yy*d],color='m',linestyle='',marker='.') i+=1 xa.append(xx*d) ya.append(yy*d)ax.plot(xa,ya,color='m',linestyle='',marker='.')#进行曲线拟合matA=[]for i in range(order+1): matA1 = [] for j in range(order+1): tx = 0.0 for k in range(len(xa)): tx+=xa[k]**(j+i) matA1.append(tx) matA.append(matA1)matA=numpy.array(matA)matB=[]for i in range(order+1): ty = 0.0 for j in range(len(xa)): ty+=ya[j]*xa[j]**i matB.append(ty)matB=numpy.array(matB)matAA=numpy.linalg.solve(matA,matB)#画出拟合后的曲线xxa= numpy.arange(-1,1.06,0.01)yya=[]for i in range(0,len(xxa)): yy=0.0 for j in range(0,order+1): dy=1.0 for k in range(0,j): dy*=xxa[i] dy*=matAA[j] yy+=dy yya.append(yy)ax.plot(xxa,yya,color='g',linestyle='-',marker='')plt.show()
效果图如下:
红色为想要拟合的图片,不过加入了噪声,训练集为紫色点,结果如图绿色曲线。
0 0
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- 最小二乘法
- eclipse插件——maven
- stm32F429中断优先级相关知识
- Android Handler消息传递机制详解
- c程序中出现segment error 和 bus error 的原因
- 封装的ViewHolder
- 最小二乘法
- linux的open files的影响
- Java+JTabbedPane+JTable
- 《核心动画——转场动画》
- ORA-00604: 递归SQL级别1出现错误, ORA-02067:要求事务处理或保存回退点
- 编程优化
- MyBatis/MySQL操作
- Linux的硬链接和软链接
- 8进制转12进制