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. WGCNA | weighted correlation network analysis

    早就接触过这个包了,只是一直畏惧,以为很复杂,也没有应用场景,所以认识很肤浅. 现在有应用场景了,我自己开发了一个幼稚的版本,发现了很多需求,后来想起了WGCNA似乎部分解决了我的问题,今天认真打开了 ...

  2. c# 正则表达式如何处理换行符?

    我们要分析网页,把整个网页内容作为匹配源,但是c#的正则表达式是默认以一行为单位的,使用 RegexOptions.Multiline 也没有实质性作用(它知识改变了^和$的行为) 只要在正则表达式前 ...

  3. LeetCode--002--两数相加(java版)

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  4. 20170914xlVBA通讯公司分类汇总

    Sub 租房() Dim Wb As Workbook Dim Sht As Worksheet Dim OpenWb As Workbook Dim OpenSht As Worksheet Dim ...

  5. 微信小程序双击事件的绑定

  6. P5157 [USACO18DEC]The Cow Gathering

    首先考虑怎么check一个点是否能被最后一个删除. 可以这么建图,以这个点建有根树,边全部向上指,再加上剩下的有向边. 很明显,这里的一条边的定义就变成了只有删去这个点,才可以删去它指向的点. 因此, ...

  7. harbor安装

    一.下载安装包https://github.com/goharbor/harbor/releases wget https://storage.googleapis.com/harbor-releas ...

  8. java XML(可扩展标记语言)

    XML 是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性是一种通用的数据交换格 ...

  9. 基于jquery实现页面loading加载效果

    实现loading 加载提示 ······ 透明遮罩 居中效果 具体代码如下: CSS样式部分: <style type="text/css"> .background ...

  10. PAT 1023 Have Fun with Numbers

    1023 Have Fun with Numbers (20 分)   Notice that the number 123456789 is a 9-digit number consisting ...