Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.optimize.fmin(单纯形)如何处理与不同量级相关的参数?_Python_Scipy_Simplex - Fatal编程技术网

Python scipy.optimize.fmin(单纯形)如何处理与不同量级相关的参数?

Python scipy.optimize.fmin(单纯形)如何处理与不同量级相关的参数?,python,scipy,simplex,Python,Scipy,Simplex,我希望通过使用单纯形算法(scipy.optimize.fmin)的python实现最小化卡方损失函数,使4参数(a、g、N和k)模型适合数据。 初步模拟表明每个参数的范围如下:a=[5,50],g=[0.05,1.5],N=[5200],k=[0,0.05] 看起来scipy.optimize.fmin函数将参数视为所有参数都在同一范围内(可能是[0,1])。我应该重新缩放吗?下面是我的代码: #determine starting point (x0) for each parameter

我希望通过使用单纯形算法(scipy.optimize.fmin)的python实现最小化卡方损失函数,使4参数(a、g、N和k)模型适合数据。 初步模拟表明每个参数的范围如下:a=[5,50],g=[0.05,1.5],N=[5200],k=[0,0.05]

看起来scipy.optimize.fmin函数将参数视为所有参数都在同一范围内(可能是[0,1])。我应该重新缩放吗?下面是我的代码:

#determine starting point (x0) for each parameter
a = np.random.uniform(5,50)
g = np.random.uniform(0.05, 1.5)
N = np.random.uniform(5, 200)
k = np.random.uniform(0, 0.05)
x0 = np.array ([a, g, N, k]) #initial guess for SIMPLEX

xopt = fmin (chis, x0, maxiter=1000)#call Simplex 

假设您希望最小化以下双变量函数

def to_min1((x,y)):
    return abs(1e-15 - x) + abs(1e15 - y)
即使这个例子不现实,它也突出了要点。当然,
fmin
可能不会在
x
中移动(如果
x0=0
),因为它已经非常接近于零

为了获得在优化程序中具有相等权重的目标,我们根据变量而不是差分来制定目标(使用分子参数以避免
零分错误
):

请注意,这是一个值得关注的问题,因为通过这样做,您希望其迭代重新计算对所有参数都具有同等的权重

下面的内容并不能完全回答你的问题,而是回答了一个问题: scipy.optimize.fmin(单纯形)是否处理与不同量级相关的参数

显然没有,因为

>>> fmin(to_min1, (0,0))
Optimization terminated successfully.
         Current function value: 1000000000000000.000000
         Iterations: 3
         Function evaluations: 11
array([ 0.,  0.])

>>> fmin(to_min2, (0,0))
Optimization terminated successfully.
         Current function value: 1.000000
         Iterations: 118
         Function evaluations: 213
array([  1.00000000e-15,   8.98437500e-05])

当然,
优化
没有
成功终止。
,可以通过增加
fmin
maxiter
参数等来完成。。。但是这两个案例显然不是以相同的方式处理。

chis的
功能是自制的吗?如果是这样的话,我会重新调整最小化的目标,使它们成为相对的而不是绝对的。我的意思是使用变量而不是微分。当然,chis函数是自制的。如果需要,我可以提供代码。你能说得更具体些吗?你说的“处理变化”是什么意思?是什么让你想到这个问题的?例如,当最小化时,你有什么结果?
>>> fmin(to_min2, (0,0))
Optimization terminated successfully.
         Current function value: 1.000000
         Iterations: 118
         Function evaluations: 213
array([  1.00000000e-15,   8.98437500e-05])