【问题标题】:Optimizing Parameter by Minimizing Chi-Square Error?通过最小化卡方误差来优化参数?
【发布时间】:2019-04-16 13:53:58
【问题描述】:

我需要创建一个函数,通过最小化卡方误差来优化参数 beta。

我的方程式是 error = vg(r) + (beta/3)*H/(1+z)rdelta(r)

我有 vg(r)、delta(r) 和 r 本身的数据。 H 和 z 是已知参数,我可以猜测为 beta,但我不知道如何在 python 中实现它。

我是 python 新手,需要一些帮助

我尝试过使用 scipy.optimize.minimize 函数,但似乎无法让它工作。

import numpy as np
from scipy import optimize as opt
import math

#parameters
z = 1.05352
bias = 1.85
h = 0.676
Om = 0.31
Ol = 1.-Om
pi = math.pi
H = 1.1


#beta = 0.47663662075855323
# ^this is a guess, I need this parameter optimized

def veldif(vr, delta):
    model = -beta/3*H/(1+z)**delta
    d = np.power((vr-model),2)
    quotient = np.divide(d ,model)
    chisquare = np.sum(quotient)
    return chisquare

result = opt.minimize(veldif,beta)

预期结果:优化的 beta 值(标量)

实际结果:错误(似乎是通过“veldif”函数传递值的错误,以及“veldif”函数的语法。

【问题讨论】:

  • 能把错误函数贴出来吗?
  • 您应该分享您所面临的错误。

标签: python parameters minimization


【解决方案1】:

不清楚您的r, vg(r), delta(r) 是什么以及您如何访问它们。但是,您的 sn-p 缺少对 beta 的初始猜测,这应该是您的目标函数 veldif 而不是 vr 的变量(如果您正在寻找最佳 beta)。至于vg(r) and delta(r);您可以将这两个定义为以r 作为输入并返回相关值的函数。这可以按如下方式完成:

import numpy as np
from scipy.optimize import minimize


# examples for delta(r) and vg(r)
delta = lambda r:  3*r
vg    = lambda r:  2*r

def veldif(beta, r, H, z):
    model      = (-beta / 3) * (H / (1+z)**delta(r))
    chisquare  = np.sum((vg(r) - model)**2 / model)
    return chisquare

# parameters
z      = 1.05352
H      = 1.1
r      = 1
args   = (r, H, z)
beta0  = 0.2

# minimization
result = minimize(veldif,
                  x0   = beta0, 
                  args = args)
print(result)

更多scipy.optimize.minimize的使用方法请参考docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2014-04-06
    • 2021-11-02
    相关资源
    最近更新 更多