Python scipy.optimize.fmin(单纯形)如何处理与不同量级相关的参数?
我希望通过使用单纯形算法(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])。我应该重新缩放吗?下面是我的代码: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
#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])