Python Scpiy:scipy.optimize.minimize的奇怪行为
我正在使用Python Scpiy:scipy.optimize.minimize的奇怪行为,python,scipy,Python,Scipy,我正在使用scipy.optimize.minimize进行缩小 在为我的目标函数f(x0)寻找合适的参数x0时,x0突然变化,值变成NaN,因此最小化方法停止 以下是奇怪行为之前的x0和结果系列: [ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514 0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624 -7.
scipy.optimize.minimize
进行缩小
在为我的目标函数f(x0)
寻找合适的参数x0
时,x0
突然变化,值变成NaN
,因此最小化
方法停止
以下是奇怪行为之前的x0
和结果
系列:
[ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514
0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624
-7.34387457 -5.30116147 4.90141309 5.06593156 0.18205401] 267.765197762
[ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514
0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624
-7.34387457 -5.30116149 4.9014131 5.06593156 0.18205401] 267.76519813
[ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514
0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624
-7.34387457 -5.30116149 4.90141309 5.06593157 0.18205401] 267.765196949
[ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514
0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624
-7.34387457 -5.30116149 4.90141309 5.06593156 0.18205402] 267.765198923
[ 5.93742471e-01 4.06257529e-01 -5.09322593e+00 1.73303924e+00
3.56252177e+00 2.98573010e+00 1.26090655e-09 -4.85059563e+00
1.22511256e+00 4.81903606e+00 2.51934646e+00 5.72130981e-10
-1.06593289e+01 2.76365721e+00 4.63158974e+00 6.86179361e+00
1.29879685e-09] nan
在改变[0.1329492 0.13074885…
后,x0
突然变为[5.93742471e-01 4.06257529e-01…
,并返回NaN
奇怪的是,目标方法f(x0)
可以返回最后一个x0
的值([5.93742471e-01 4.06257529e-01…])
)
我真的不知道该怎么办。我不太确定原因是什么,因为我没有目标函数或对scipy.optimize.minimize()的调用,但我看到的是: 第一个和第二个到最后一个x在两个组件中仅相差1*10^-8。这似乎非常小 如果未另行指定,
minimize
将根据是否指定了约束来决定(查看文档字符串)。你很有可能最终得到BFG或类似的,基于梯度的。现在,如果你尝试根据前几次评估构建梯度,我可以看出,在如此小的间距下,这将导致疯狂的结果
问题是:你是否做了导致这些小的起始间隔的事情?你是否指定了要使用的算法?你是否指定了可能触发小的初始间隔的边界?通常,除非有充分的理由不去某个地方,否则不要设置边界。许多人只会基于“我认为这里没有好的解决方案”--这是一个坏习惯,并且混淆了许多算法
为了更好的分析,你应该发布更多的信息。
根据您的问题,您可能会发现,考虑到输入变量的数量,最小二乘法或单纯形优化器可能更好,甚至可能是遗传算法。能够看到
最小化中指定的目标函数和参数将很有帮助,(例如方法是什么?
(您尝试过其他方法吗)您是否设置了任何界限
)听起来您认为问题与样本值的剧烈波动有关;设置界限
参数可能会很有用