import numpy as np

# from enthought.mayavi import mlab

'''

ogrid[-1:5:6j,-1:5:6j]

[array([[-1. ],

[ 0.2],

[ 1.4],

[ 2.6],

[ 3.8],

[ 5. ]]), array([[-1. ,  0.2,  1.4,  2.6,  3.8,  5. ]])]

'''

x,y = np.ogrid[-2:2:20j,-2:2:20j]  #返回两个数组,一个长度为1,一个列数为1。前三个参数同range,但两边都是闭区间,当第三个参数是复数(j)时,以整数部分作步长。

z=x*np.exp(x**2-y**2)

#p1=mlab.surf(x,y,z,warp_scale="auto")

#mlab.axes(xlable='x',ylable='y',zlable='z')

#mlab.outline(p1)

#mlab.show()

#这个mayavi画图软件 太难安装了,遇到了错误,貌似需要安装对应的visual c然后设置visual c 的环境什么之类的才能好,暂时不管了

from scipy.optimize import leastsq

import pylab as p1

#最小二乘拟合(Least-Square fitting) ,已知数据集(x,y),已知函数y=f(x),找函数f中用的参数集p,使s(p)=∑[yi-f(xi,p)]?

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) #返回以0开始,以-2*np.pi结束的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]  #第一次猜测的函数拟合参数

#调用leastsq进行数据拟合

#residuals为计算误差的函数

#p0为拟合参数的初始值

#args为需要拟合的试验数据

plsq=leastsq(residuals,p0,args=(y1,x))

print(u"真是参数:",[A,k,theta])

print(u"拟合参数:",plsq[0])  #实验数据拟合后的参数

p1.plot(x,y0,label=u"真实数据")

p1.plot(x,y1,label=u"带噪声的实验数据")

p1.plot(x,func(x,plsq[0]),label=u"拟合数据j")

p1.legend()

p1.show()

#对于一个离散的线性时不变系统h,如果它的输入是x,那么其输出y可以用x和h的卷积表示 :y=x * h

#现在的问题是如果已知系统的输入x和输出y,如何计算系统的传递函数h,或如果已知系统的传递函数h和系统的输出y,如何计算系统的输入x.这种运算被称为反卷积

#运算,是十分困难的,特别是在实际的运用中,测量系统的输出总是存在误差。

#本程序用各种fmin函数求卷积的逆运算

import scipy.optimize as opt

import numpy as np

def test_fmin_convolve(fminfunc,x,h,y,yn,x0):

''' x (*) h =y ,(*) 表示卷积

yn 为在y的基础上添加一些干扰噪声的结果

x0为求解x的初始值

'''

def convolve_func(h):

''' 计算yn - x (*) h 的 power

fmin 将通过计算使得此power最小'''

return np.sum((yn - np.convolve(x,h))**2)

#调用fmin函数,以x0为初始值

h0=fminfunc(convolve_func,x0)

print(fminfunc.__name__)

print('------------------')

#输出x (*) h0 和y 之间的相对误差

print('error of y:',np.sum((np.convolve(x,h0)-y)**2)/np.sum(y**2))

#输出h0和h之间的相对误差

print('error of h:',np.sum((h0-h)**2)/np.sum(h**2))

def test_n(m,n,nscale):

''' 随机产生 x,h,y,yn,x0 等数列,调用各种fmin函数求解

m 为 x 的长度,n 为 h 的长度,nscale 为干扰的强度 '''

x=np.random.rand(m)

h=np.random.rand(n)

y=np.convolve(x,h)

yn=y+np.random.rand(len(y))* nscale

x0=np.random.rand(n)

test_fmin_convolve(opt.fmin,x,h,y,yn,x0)

test_fmin_convolve(opt.fmin_powell,x,h,y,yn,x0)

test_fmin_convolve(opt.fmin_cg,x,h,y,yn,x0)

test_fmin_convolve(opt.fmin_bfgs,x,h,y,yn,x0)

if __name__=='__main__':

test_n(200,20,0.1)

#卡方检验示例代码

from scipy.stats import chi2

import matplotlib.pyplot as plt

import numpy as np

fig, ax = plt.subplots(1, 1)

df = 20

mean, var, skew, kurt = chi2.stats(df, moments='mvsk')

#绘制函数的起始点和终止点

#pdf为概率密度函数  chi2.pdf(x, df) = 1 / (2*gamma(df/2)) * (x/2)**(df/2-1) * exp(-x/2)

#默认的是标准(正态分布)概率密度函数,要设置它的形状可以通过参数loc和scale。chi2.pdf(x, df, loc, scale)等价于

#百分比函数(PPF) :the inverse of the CDF. PPF  函数和连续分布函数CDF相逆,

#ppf(0.01, df)表示取值小于哪个点的概率之和等于0.01,在df取值df,的情况下。

initial=chi2.ppf(0.01, df)

end=chi2.ppf(0.99, df)

print(chi2.cdf(end,df),chi2.cdf(initial,df))

#0.99 0.01    chi2.cdf(x,df)是chi2.ppf(x,df)的反函数。

#cdf (cumulative distribution function) 累计概率分布函数: 对于连续函数,所有小于等于a的值,其出现概率的和。F(a)=P(x<=a)

#随机变量小于等于某个数值的概率。F(x)为增函数。 累计分布的反函数,可以用来生成服从该随机分布的随机变量。

x = np.linspace(initial,end, 100)

#概率密度函数用于绘图

ax.plot(x, chi2.pdf(x, df), 'r-', lw=5, alpha=0.6, label='chi2 pdf') #‘r-’表示红色的实线,lw=5表示线宽度值取5,alpha=0.6表示透明度取0.6,label设置线的标注

ax.plot(x, chi2.pdf(x, 2), 'g-', lw=3, alpha=0.6, label='chi2 pdf')

ax.plot(x, chi2.pdf(x, 4), 'b--', lw=3, alpha=0.6, label='chi2 pdf')

ax.plot(x, chi2.pdf(x, 11), 'y--', lw=3, alpha=0.6, label='chi2 pdf')

#ax.axis([-3,2,-0.01,10])  #设置坐标轴的取值范围为x[-3,2],y[-0.01,10]

plt.title("df is %d"%df) #设置图形的标题

plt.show()  #展示图形

rv = chi2(df)  #绑定卡方分布的df值

plt.plot(x, rv.pdf(x), 'ko', lw=2, label='frozen pdf')

#plt.legend()  #legend()用来设置图形标注框在图像中的位置

plt.show()

print(chi2.ppf([0.001, 0.5, 0.999], df))

print(chi2.ppf(0.001, df),chi2.ppf( 0.5, df),chi2.ppf( 0.999, df),sep=' @')

#[  5.92104075  19.33742923  45.31474662]

#5.92104074549 @19.3374292294 @45.3147466181

r = chi2.rvs(df, size=100)  #产生随机数100个

print(r)

#卡方公式(o-e)^2 / e

#期望值和收集到数据不能低于5,o(observed)观察到的数据,e(expected)表示期望的数据

#(o-e)平方,最后除以期望的数据e

import numpy as np

from scipy import stats

from scipy.stats import chisquare

list_observe=[30,14,34,45,57,20]

list_expect=[20,20,30,40,60,30]

print(chisquare(f_obs=list_observe, f_exp=list_expect))

p=chisquare(f_obs=list_observe, f_exp=list_expect)[1]

'''

返回NAN,无穷小

'''

if p>0.05 or p=="nan":

print("H0 win,there is no difference")

else:

print("H1 win,there is difference")

#Power_divergenceResult(statistic=11.441666666666666, pvalue=0.043293130315804972)

#H1 win,there is difference

python 最小二乘拟合,反卷积,卡方检验的更多相关文章

  1. 学习Tensorflow,反卷积

    在深度学习网络结构中,各个层的类别可以分为这几种:卷积层,全连接层,relu层,pool层和反卷积层等.目前,在像素级估计和端对端学习问题中,全卷积网络展现了他的优势,里面有个很重要的层,将卷积后的f ...

  2. Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)

    今天,主要和大家分享一下最近研究的卷积网络和它的一些变种. 首先,介绍一下基础的卷积网络. 通过PPT上的这个经典的动态图片可以很好的理解卷积的过程.图中蓝色的大矩阵是我们的输入,黄色的小矩阵是卷积核 ...

  3. 非线性函数的最小二乘拟合及在Jupyter notebook中输入公式 [原创]

    突然有个想法,能否通过学习一阶RC电路的阶跃响应得到RC电路的结构特征——时间常数τ(即R*C).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多的采样点数来降低信号采集噪声对τ估计值的 ...

  4. 最小二乘拟合(转)good

    在物理实验中经常要观测两个有函数关系的物理量.根据两个量的许多组观测数据来确定它们的函数曲线,这就是实验数据处理中的曲线拟合问题.这类问题通常有两种情况:一种是两个观测量x与y之间的函数形式已知,但一 ...

  5. python编译以及反编译

    在Python2.3之前Python自带反编译的工具,高版本的貌似这个反编译的已经不能用了. 据说是在Python2.7上最好用的反编译工具uncompyle 代码地址 http://github.c ...

  6. OpenCV 最小二乘拟合方法求取直线倾角

    工业相机拍摄的图像中,由于摄像质量的限制,图像中的直线经过处理后,会表现出比较严重的锯齿.在这种情况下求取直线的倾角(其实就是直线的斜率),如果是直接选取直线的开始点和结束点来计算,或是用opencv ...

  7. 对抗生成网络-图像卷积-mnist数据生成(代码) 1.tf.layers.conv2d(卷积操作) 2.tf.layers.conv2d_transpose(反卷积操作) 3.tf.layers.batch_normalize(归一化操作) 4.tf.maximum(用于lrelu) 5.tf.train_variable(训练中所有参数) 6.np.random.uniform(生成正态数据

    1. tf.layers.conv2d(input, filter, kernel_size, stride, padding) # 进行卷积操作 参数说明:input输入数据, filter特征图的 ...

  8. 深度学习原理与框架-图像补全(原理与代码) 1.tf.nn.moments(求平均值和标准差) 2.tf.control_dependencies(先执行内部操作) 3.tf.cond(判别执行前或后函数) 4.tf.nn.atrous_conv2d 5.tf.nn.conv2d_transpose(反卷积) 7.tf.train.get_checkpoint_state(判断sess是否存在

    1. tf.nn.moments(x, axes=[0, 1, 2])  # 对前三个维度求平均值和标准差,结果为最后一个维度,即对每个feature_map求平均值和标准差 参数说明:x为输入的fe ...

  9. 深度学习原理与框架- tf.nn.conv2d_transpose(反卷积操作) tf.nn.conv2d_transpose(进行反卷积操作) 对于stride的理解存在问题?

    反卷积操作: 首先对需要进行维度扩张的feature_map 进行补零操作,然后使用3*3的卷积核,进行卷积操作,使得其维度进行扩张,图中可以看出,2*2的feature经过卷积变成了4*4.    ...

随机推荐

  1. Basic Calculator 基本计算器

    2018-09-27 22:02:36 一.Basic Calculator II 问题描述: 问题求解: sign用来保存前一个符号,用num来记录数字,如果碰到一个符号或者到达结尾,则需要进行入栈 ...

  2. 记一次排查局网内的ARP包 “不存在的” MAC 地址及 “不存在的”IP 所发的ARP包

    xu言: 最近生了一场病,虽然不是给自己找理由不写.不过果不其然还是没有坚持每天发一篇啊.不过,有时间我还是会把一些有意思的事情记录下来.以作备忘吧.这人老了记性就不好了.哈哈哈,当然,也侧面说明了. ...

  3. Hibernate多对多单向关联和双向关联 --Hibernate框架

    Hibernate关联关系中相对比较特殊的就是多对多关联,多对多关联与一对一关联和一对多关联不同,多对多关联需要另外一张映射表用于保存多对多映射信息.本例介绍多对多单向关联和双向关联.单向关联 :指具 ...

  4. 安卓中使用OkHttp发送数据请求的两种方式(同、异步的GET、POST) 示例-- Android基础

    1.首先看一下最终效果的截图,看看是不是你想要的,这个年代大家都很忙,开门见山很重要! 简要说下,点击不同按钮可以实现通过不同的方式发送OkHttp请求,并返回数据,这里请求的是网页,所以返回的都是些 ...

  5. 20171205xlVBA往返航班组合

    'ClassPlan Public Org As String Public Des As String Public FlyNo As String Public StartDate As Vari ...

  6. 关于OkHttp同步请求的小错误

    今天进行OkHttp的同步请求 写的都是按照官方的去写的 但是返回的东西却不是我想要的 原因是我直接拿到Response后,直接Response.toString,想要拿到返回值 但是这样是错误的,正 ...

  7. hdu-5985 概率DP

    http://acm.hdu.edu.cn/showproblem.php?pid=5985 作为队里负责动态规划的同学,做不出来好无奈啊.思考了一个下午,最好还是参考了别人的思想才写出来,数学啊!! ...

  8. 从早期 Spring Boot 版本升级

    如果你现在正在从早期的 Spring Boot 版本进行升级的话,请访问 “migration guide” on the project wiki 页面,这个页面提供了有关升级的详细指南.同时也请查 ...

  9. HDU-6386-最短路

    Age of Moyu Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  10. Visual studio 利用Nuget 控制台安装已经下载好的插件

    利用Nuget 控制台安装已经下载好的插件 1 打开控制台 Tools > Library Package Manager > Package Manager Console 2 设置pa ...