【发布时间】:2017-07-18 08:00:41
【问题描述】:
我正在尝试 minimize 一个通过 scipy 输出 chi-square 的函数,并找到最适合高斯叠加的 mu、sigma、normc。
from math import exp
from math import pi
from scipy.integrate import quad
from scipy.optimize import minimize
from scipy.stats import chisquare
import numpy as np
# guess intitial values for minimized chi-square
mu, sigma = np.mean(mydata), np.std(mydata) # mydata is my data points
normc = 1/(sigma * (2*pi)**(1/2))
gauss = lambda x: normc * exp( (-1) * (x - mu)**2 / ( 2 * (sigma **2) ) ) # Gaussian Distribution
# assume I have pre-defined bin-boundaries as a list called binbound
def expvalperbin(binbound,mu,sigma,normc):
# calculates expectation value per bin
ans = []
for index in range(len(binbound)):
if index != len(binbound)-1:
ans.append( quad( gauss, binbound[index], binbound[index+1])[0] )
return ans
expvalguess = expvalperbin(binbound,mu,sig,normc)
obsval = countperbin(binbound,mydata)
arglist = [mu,sig,norm]
def chisquareopt(obslist,explist):
return chisquare(obslist,explist)[0]
chisquareguess = chisquareopt((obsval,expvalguess), expvalguess, args=arglist)
result = minimize( chisquareopt(obsval,expvalguess), chisquareguess )
print(result)
运行此代码会出现此错误:
TypeError: chisquareopt() got an unexpected keyword argument 'args'
我有几个问题:
1) 如何编写函数以允许将参数传递给我的函数 chisquareopt?
2) 我如何判断 scipy 是否会优化给出最小卡方的参数 [mu, sigma, normc]?如何从优化中找到这些参数?
3) 很难知道我是否在这里取得了进展。我在正确的轨道上吗?
编辑:如果相关,我有一个输入 [mu, sigma, normc] 并输出子列表列表的函数,每个子列表包含 [mu, sigma, normc] 的可能组合(其中外部列表涵盖指定范围内所有可能的参数组合)。
【问题讨论】:
标签: python-3.x scipy arguments parameter-passing minimization