zoukankan      html  css  js  c++  java
  • 最小二乘拟合(scipy实现)

    Scipy库在numpy库基础上增加了众多数学,科学及工程计算中常用库函数。如线性代数,常微分方程数值求解,信号处理,图像处理,稀疏矩阵等。

    如下理解通过Scipy进行最小二乘法拟合运算

    最小二乘拟合(optimize子函数)

    from scipy.optimize import leastsq 

    optimize函数含有实现最小二乘法的函数 leastsq,

    如下通过对正弦函数的拟合,求得最小二乘拟合参数。func三参数A,k,theta分别表示对应振幅,频率,相角。

    import  numpy as np 
    from scipy.optimize import leastsq
    import pylab as pl 
    from pylab import mpl
    mpl.rcParams['font.sans-serif'] = ['KaiTi']  # 解决中文乱码
    mpl.rcParams['axes.unicode_minus'] = False 	 # 解决负号显示为方框的问题
    
    def func(x,p):
    
    	# 数据拟合所用函数: A*sin(2*pi*k*x + theta)
    
    	A,k,theta  = p
    	return A*np.sin(2*np.pi*k*x + theta)
    
    def residuals(p,y,x):
    
    	# 实验数据x,y和拟合函数之间的差,p为拟合需要找到的系数
    
    	return y - func(x,p)
    
    x = np.linspace(0, -2*np.pi, 100) # 创建等差数列,100表示数据点个数
    A,k,theta = 10, 0.34 , np.pi/6  # 真实数据的函数参数
    y0 = func(x, [A,k,theta])       # 真实数据
    y1 = y0 + 2* np.random.randn(len(x)) # 加入噪声后的实验数据
    
    p0  = [7,0.2,0] 				# 第一次猜测的函数拟合参数
    
    """
    	1、调用leastsq进行数据拟合
    	2、residuals为计算误差的函数
    	3、p0为拟合参数的初始值
    	4、args为需要拟合的实验数据
    """
    plsq = leastsq(residuals,p0,args = (y1,x))
    
    print(u"真实参数:", [A,k,theta])
    print(u"拟合参数:", plsq[0])    #实验数据拟合后的参数
    
    # 作图
    pl.plot(x, y0, label = u'真实数据')
    pl.plot(x, y1, label = u'带噪声的实验数据')
    pl.plot(x, func(x,plsq[0]) , label = u"拟合数据")
    pl.legend()
    pl.show()  

     图形展示:

     

    以上可以看出由于正弦函数的周期性,拟合参数规律走势和和真实数据实际上是一致的。

  • 相关阅读:
    pipelinewise 学习二 创建一个简单的pipeline
    pipelinewise 学习一 docker方式安装
    Supercharging your ETL with Airflow and Singer
    ubuntu中使用 alien安装rpm包
    PipelineWise illustrates the power of Singer
    pipelinewise 基于singer 指南的的数据pipeline 工具
    关于singer elt 的几篇很不错的文章
    npkill 一个方便的npm 包清理工具
    kuma docker-compose 环境试用
    kuma 学习四 策略
  • 原文地址:https://www.cnblogs.com/hqczsh/p/11297669.html
Copyright © 2011-2022 走看看