Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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.minimize收敛问题_Python_Numpy_Statistics_Scipy - Fatal编程技术网

Python scipy.optimize.minimize收敛问题

Python scipy.optimize.minimize收敛问题,python,numpy,statistics,scipy,Python,Numpy,Statistics,Scipy,我有一个我希望优化的函数,但它返回nans 以下是函数(fnRestrictParams是一个辅助函数): 测试此功能的数据为 我知道这个函数工作正常,因为我已经将输出与原始作者提供的实现(用另一种编程语言)进行了比较 但是,当我尝试使用scipy.optimize.minimize优化此函数时: # optimize the function without the gradient spoGC = spo.minimize(fnGASGaussianCopulaLikelihood, np.

我有一个我希望优化的函数,但它返回
nan
s

以下是函数(
fnRestrictParams
是一个辅助函数):

测试此功能的数据为

我知道这个函数工作正常,因为我已经将输出与原始作者提供的实现(用另一种编程语言)进行了比较

但是,当我尝试使用
scipy.optimize.minimize
优化此函数时:

# optimize the function without the gradient
spoGC = spo.minimize(fnGASGaussianCopulaLikelihood, np.array([0.005,-5,5.0]),
                     args = (int(mData.shape[0]), mData[:, [0, 1]]),
             method = 'BFGS', options = {'disp': True, 'gtol': 1e-10, 'eps': 1e-10})
我得到:

Optimization terminated successfully.
         Current function value: nan
         Iterations: 0
         Function evaluations: 5
         Gradient evaluations: 1
Out[34]: 
(array([ 0.005     ,  1.0067607 ,  0.72974065]),
 nan,
 array([ nan,  nan,  nan]),
 array([[1, 0, 0],
        [0, 1, 0],
        [0, 0, 1]]),
 5,
 1,
 0)

这显然是不好的。我无法找出导致此问题的原因。任何帮助都将不胜感激

嗯,函数返回的是
nan
,因此存在问题。调试函数内部停止的最小化代码。复制导致异常的函数的输入。然后您就知道函数的哪些值不起作用,您可以进一步调查函数是如何失败的。@gg349您完全正确。接下来的问题是我应该如何处理
NaN
s。我在R中编写了相同的函数,R的BFGS实现没有问题。我是否应该在函数中检查是否返回了
NaN
,并将其设置为一些较大的正值,以阻止BFGS尝试探索该部分参数空间?在Python中是否有一个更健壮的BFGS实现(例如R的
optim
),当遇到
NaN
s时,它会返回到最后一步?如果有必要,我可以提供R代码。1)是的,这是一种选择,我会选择;2) 我不明白为什么这个解决方案不可靠;3) 我不知道R中的optim是如何处理nans的,我无法想象它是如何工作的,但我看不出这是一个多么好的特性,它会夺走你的力量。简单地说,我不知道有任何针对返回无效值的函数的优化算法。这个论点超越了编码。
# optimize the function without the gradient
spoGC = spo.minimize(fnGASGaussianCopulaLikelihood, np.array([0.005,-5,5.0]),
                     args = (int(mData.shape[0]), mData[:, [0, 1]]),
             method = 'BFGS', options = {'disp': True, 'gtol': 1e-10, 'eps': 1e-10})
Optimization terminated successfully.
         Current function value: nan
         Iterations: 0
         Function evaluations: 5
         Gradient evaluations: 1
Out[34]: 
(array([ 0.005     ,  1.0067607 ,  0.72974065]),
 nan,
 array([ nan,  nan,  nan]),
 array([[1, 0, 0],
        [0, 1, 0],
        [0, 0, 1]]),
 5,
 1,
 0)