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. 动态规划-击爆气球 Burst Balloons

    2018-10-03 19:29:43 问题描述: 问题求解: 很有意思的题目,首先想到的是暴力遍历解空间,当然也用到了memo,可惜还是TLE,因为时间复杂度确实有点过高了,应该是O(n!). Ma ...

  2. 雷林鹏分享:C# 变量

    C# 变量 一个变量只不过是一个供程序操作的存储区的名字.在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局.范围内的值可以存储在内存中,可以对变量进行一系列操作. 我们已经讨论 ...

  3. Elasticsearch-基础介绍及索引原理分析

    介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 L ...

  4. LeetCode--026--删除排序数组中的重复项

    问题描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  5. javascript 两张图片切换 三目运算符

    <body> <script> function changeImage(){ var s = document.getElementById('myimage'); s.sr ...

  6. 5月13 jquery的一些应用

    首先对于JavaScript的一些复习:操作内容,操作属性,操作样式 <title>无标题文档</title> <style> #aa { width:200px; ...

  7. react中使用antd Table组件滚动加载数据的实现

    废话不多说,直接上代码.一目了然. import React, { Component } from "react"; import { Table } from "an ...

  8. CacheManager.NET

    Cache缓存在计算机领域是一个被普遍使用的概念.硬件中CPU有一级缓存,二级缓存, 浏览器中有缓存,软件开发中也有分布式缓存memcache, redis.缓存无处不在的原因是它能够极大地提高硬件和 ...

  9. python 小练习4

    给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个连续子序列,使其和最大,输出最大子序列的和. 例如,对于L=[2,-3,3,50], 输出53(分析:很明显,该列表最大连续子序 ...

  10. 【LeetCode】Permutation全排列

    1. Next Permutation 实现C++的std::next_permutation函数,重新排列范围内的元素,返回按照 字典序 排列的下一个值较大的组合.若其已经是最大排列,则返回最小排列 ...