在了解了最小二乘法的基本原理之后python_numpy实用的最小二乘法理解,就可以用最小二乘法做曲线拟合了

1.直线拟合

直线拟合

已知图中拟合数据的坐标,对图中的拟合数据进行直线拟合。

依旧使用最小二乘法求解

Ax=b——————1

无解下的最优解。已知点的个数为n,所求直线的方程为y1=ax1+b,A由方程右边的a,b的系数构成构成(nx2)的矩阵,每行为(x1,1),b由已知点的y1坐标构成矩阵(nx1)。方程1中的x为要求的列向量[a,b]。

A.TAx’=A.Tb

x’=(A.TA)^(-1)A.TC

求得x‘后,画出拟合曲线的yy=Ax’

import numpy as np

import matplotlib.pyplot as plt

#x的个数决定了样本量

x = np.arange(-1,1,0.02)

#y为理想函数

y = 2*np.sin(x*2.3)+0.5*x**3

#y1为离散的拟合数据

y1 = y+0.5*(np.random.rand(len(x))-0.5)

##################################

#主要程序

one=np.ones((len(x),1))#len(x)得到数据量

x=x.reshape(x.shape[0],1)

A=np.hstack((x,one))#两个100x1列向量合并成100x2,(100, 1) (100,1 ) (100, 2)

C=y1.reshape(y1.shape[0],1)

#等同于C=y1.reshape(100,1)

#虽然知道y1的个数为100但是程序中不应该出现人工读取的数据

def optimal(A,b):

B = A.T.dot(b)

AA = np.linalg.inv(A.T.dot(A))#求A.T.dot(A)的逆

P=AA.dot(B)

print P

return A.dot(P)

#求得的[a,b]=P=[[ 2.88778507e+00] [ -1.40062271e-04]]

yy = optimal(A,b)

#yy=P[0]*x+P[1]

##################################

plt.plot(x,y,color='g',linestyle='-',marker='',label=u'理想曲线')

plt.plot(x,y1,color='m',linestyle='',marker='o',label=u'拟合数据')

plt.plot(x,yy,color='b',linestyle='-',marker='.',label=u"拟合曲线")

# 把拟合的曲线在这里画出来

plt.legend(loc='upper left')

plt.show()

直线拟合结果

从结果中可以看出,直线拟合并不能对拟合数据达到很好的效果,下面我们介绍一下曲线拟合。

2.曲线拟合

曲线拟合

图中的拟合数据如果用直线进行拟合效果会更差,曲线能更好的表达数据的特征。这里我们使用多项式函数进行拟合。

拟合函数:

y=ax

n+bx(n-1)+cx^(n-2)+…+d

假设拟合数据共有100个

Ax=b

A=[x1^n x1^(n-1) x1^(n-2) …… 1]

[x2^n x2^(n-1) x2^(n-2) …… 1]

……

[x100^n x100^(n-1) x100^(n-2) . 1]

b=[y1]

[y2]

……

[y100]

解得拟合函数的系数[a,b,c…..d]

CODE:

import numpy as np

import matplotlib.pyplot as plt

x = np.arange(-1,1,0.02)

y = ((x*x-1)**3+1)*(np.cos(x*2)+0.6*np.sin(x*1.3))

y1 = y+(np.random.rand(len(x))-0.5)

##################################

### 核心程序

#使用函数y=ax^3+bx^2+cx+d对离散点进行拟合,最高次方需要便于修改,所以不能全部列举,需要使用循环

#A矩阵

m=[]

for i in xrange(7):#这里选的最高次为x^7的多项式

a=x**(i)

m.append(a)

A=np.array(m).T

b=y1.reshape(y1.shape[0],1)

##################################

def projection(A,b):

AA = A.T.dot(A)#A乘以A转置

w=np.linalg.inv(AA).dot(A.T).dot(b)

print w#w=[[-0.03027851][ 0.1995869 ] [ 2.43887827] [ 1.28426472][-5.60888682] [-0.98754851][ 2.78427031]]

return A.dot(w)

yw = projection(A,b)

yw.shape = (yw.shape[0],)

plt.plot(x,y,color='g',linestyle='-',marker='',label=u"理想曲线")

plt.plot(x,y1,color='m',linestyle='',marker='o',label=u"已知数据点")

plt.plot(x,yw,color='r',linestyle='',marker='.',label=u"拟合曲线")

plt.legend(loc='upper left')

plt.show()

结果

根据结果可以看到拟合的效果不错。

我们可以通过改变

拟合函数类型

样本数(此处为x的个数)

来调整拟合效果。

如果此处我们把拟合函数改为最高次为x^20的多项式

m=[]

for i in xrange(20):

a=x**(i)

m.append(a)

所得结果如下:

x^20 样本数100

这种现象称为

过拟合现象

可以通过增加样本数数,

降低拟合函数的次数

矫正过拟合现象

在保持拟合函数改为最高次为x^20的多项式的条件下,增大样本数:

x = np.arange(-1,1,0.005) #原来是x = np.arange(-1,1,0.02)

x^20 样本数400

通过结果可以看出,过拟合现象得到了改善。

python最小二乘法拟合三维曲线_python_numpy最小二乘法的曲线拟合相关推荐

  1. 最小二乘法拟合三维直线

    在<高等数学>的书中给出了最小二乘法拟合直线的具体实例,但是那个例子是拟合二维直线的f(t)=at+b,那么三维直线怎么使用最小二乘法来拟合呢?我们先来看看<高等数学>书中的例 ...

  2. python最小二乘法拟合直线_Python 实现最小二乘法拟合直线

    线性回归 线性回归是回归分析中最常见的一种建模方式.当因变量是连续的,自变量是连续的或者离散的,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析. 用方程 y = mx + c,其中 ...

  3. python函数拟合不规则曲线_python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案...

    第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式.具体示例如下. ###拟合年龄 import numpy as np import matplotlib.pyplot as p ...

  4. python函数拟合不规则曲线_python曲线拟合

    Python曲线拟合 前言 这篇文章的由来:前几天在做大学物理居家实验水滴法测量声速的时候需要使用phyphox软件导出的数据拟合y=1/(a+b*x)曲线.虽然老师要求使用Origin软件拟合,但是 ...

  5. python如何拟合三维平面(拟合Intel Realsense D435深度数据点)

    文章目录 拟合Intel Realsense D435深度数据点 参考文章:[MQ笔记]超简单的最小二乘法拟合平面(Python) import numpy as np import matplotl ...

  6. 最小二乘法拟合圆c语言,最小二乘法拟合圆公式推导及其实现

    https://blog.csdn.net/Jacky_Ponder/article/details/70314919 1.1最小二乘拟合圆介绍与推导 最小二乘法(least squares anal ...

  7. 计算机最小二乘法拟合,数值计算_第6章 曲线拟合的最小二乘法.doc

    数值计算_第6章 曲线拟合的最小二乘法.doc 还剩 29页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 第 ...

  8. matlab拟合空间曲线。散点拟合三维曲线

    问题:已知三组数据,就是直角坐标系中的x,y,z的三个数组,要求在matlab中拟合出这条空间曲线. 帖子源数据: a= [22.77,17.13,14.37,12.98,12.34,12.12,12 ...

  9. python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?

    接受的答复 this question 提供了 a small multi poly fit library,它将使用numpy完成所需的任务,您可以将结果插入到绘图中,如下所述. 您只需将x和y点的 ...

最新文章

  1. java 圈复杂度_关于Java:降低Switch语句的循环复杂度-Sonar
  2. 项目服务路由保存不成功_汽车延保服务有哪些项目?不了解的小伙伴快看过来...
  3. ubuntu中怎么打开python_如何在Linux Ubuntu 16.04下安装及打开PyCharm
  4. mac下安装caffe
  5. js 拉勾网效果_借助JShaman,建立自己的JS代码混淆平台
  6. 理解K8S的编排和网络
  7. 编程工作枯燥、代码质量不高?华为云 MVP 来支招!
  8. 函数和结构(C++)
  9. CentOS 6.6下PXE+Kickstart无人值守安装操作系统
  10. 三维散点图加colorbar
  11. 深度学习(1): 深度学习简介
  12. Ubuntu可视化监控温度
  13. 移动端H5页面在ios设备上软键盘顶起页面后隐藏,页面不回弹的解决方案
  14. 新账户的收发邮件服务器,轻松使用新电子邮件系统-信息化建设与管理处
  15. extjs6 清除grid中combo列的值
  16. 【Tushare 大数据社区——解救你的财经数据需求】
  17. 壹连科技冲刺深交所:年营收14亿 65%收入来自宁德时代
  18. STM32cube HAL库两条命令实现i2c通信---Nucleo L476RG用I2C实现tmp117模块温度读取并串口打印
  19. python的post请求中加参数_Python 模拟post请求
  20. 事务、提交、回滚、脏读、幻读等名词解释以及事务隔离级别详解

热门文章

  1. Android天天数钱游戏项目源码
  2. Linux 30 岁了,你了解它的吉祥物企鹅 “Tux“ 吗?
  3. 饼图和条形图适用于分析什么数据
  4. 声音的变奏:深入理解ffmpeg音频格式转换的奥秘与应用
  5. css 文字首行缩进2两个字符,悬挂缩进
  6. 苹果录音怎么转换成mp3格式?
  7. weui.js 的使用
  8. oppo android多大内存,oppo r11 plus内存多大
  9. CNN在句子相似性建模的应用--tensorflow实现篇2
  10. UI/UX设计师进阶之路