Python scipy.optimize.minimize returns“;ValueError:序列的真值不明确;

Python scipy.optimize.minimize returns“;ValueError:序列的真值不明确;,python,pandas,optimization,scipy,minimize,Python,Pandas,Optimization,Scipy,Minimize,我使用scipy.optimize.minimize包和BFGS方法最大化ARMA模型的对数似然。但是,我得到以下错误: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 我优化的函数返回正确的输出,即指定ARMA模型的对数可能性,因此我尝试查看最小化包的源代码,但是它非常复杂,我无法找出问题所在。我意识到这不是一个直截了当的问题,但是我希望有使用最小化软

我使用scipy.optimize.minimize包和BFGS方法最大化ARMA模型的对数似然。但是,我得到以下错误:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我优化的函数返回正确的输出,即指定ARMA模型的对数可能性,因此我尝试查看最小化包的源代码,但是它非常复杂,我无法找出问题所在。我意识到这不是一个直截了当的问题,但是我希望有使用最小化软件包经验的人能给我一些关于可能导致错误的指导

给定的回溯如下所示:

    ValueError                                Traceback (most recent call last)

/......../.py in fit_ARMA(data, p, q)
    150     optim_args=(data, p, q)
    151
--> 152     fitted_params = minimize(minus_ll_ARMA, x0=init_params, args=optim_args, method='BFGS')
    153
    154     return fitted_params.x

/anaconda3/lib/python3.6/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
    595         return _minimize_cg(fun, x0, args, jac, callback, **options)
    596     elif meth == 'bfgs':
--> 597         return _minimize_bfgs(fun, x0, args, jac, callback, **options)
    598     elif meth == 'newton-cg':
    599         return _minimize_newtoncg(fun, x0, args, jac, hess, hessp, callback,

/anaconda3/lib/python3.6/site-packages/scipy/optimize/optimize.py in _minimize_bfgs(fun, x0, args, jac, callback, gtol, norm, eps, maxiter, disp, return_all, **unknown_options)
    981             alpha_k, fc, gc, old_fval, old_old_fval, gfkp1 = \
    982                      _line_search_wolfe12(f, myfprime, xk, pk, gfk,
--> 983                                           old_fval, old_old_fval, amin=1e-100, amax=1e100)
    984         except _LineSearchError:
    985             # Line search failed to find a better solution.

/anaconda3/lib/python3.6/site-packages/scipy/optimize/optimize.py in _line_search_wolfe12(f, fprime, xk, pk, gfk, old_fval, old_old_fval, **kwargs)
    801     ret = line_search_wolfe1(f, fprime, xk, pk, gfk,
    802                              old_fval, old_old_fval,
--> 803                              **kwargs)
    804
    805     if ret[0] is not None and extra_condition is not None:

/anaconda3/lib/python3.6/site-packages/scipy/optimize/linesearch.py in line_search_wolfe1(f, fprime, xk, pk, gfk, old_fval, old_old_fval, args, c1, c2, amax, amin, xtol)
     99     stp, fval, old_fval = scalar_search_wolfe1(
    100             phi, derphi, old_fval, old_old_fval, derphi0,
--> 101             c1=c1, c2=c2, amax=amax, amin=amin, xtol=xtol)
    102
    103     return stp, fc[0], gc[0], fval, old_fval, gval[0]

/anaconda3/lib/python3.6/site-packages/scipy/optimize/linesearch.py in scalar_search_wolfe1(phi, derphi, phi0, old_phi0, derphi0, c1, c2, amax, amin, xtol)
    153
    154     if old_phi0 is not None and derphi0 != 0:
--> 155         alpha1 = min(1.0, 1.01*2*(phi0 - old_phi0)/derphi0)
    156         if alpha1 < 0:
    157             alpha1 = 1.0

/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __nonzero__(self)
   1574         raise ValueError("The truth value of a {0} is ambiguous. "
   1575                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1576                          .format(self.__class__.__name__))
   1577
   1578     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是一个产生错误的可行示例:

import pandas as pd # version 0.23.4
import numpy as np # version 1.15.4
from scipy.optimize import minimize   # version 1.1.0

data = pd.DataFrame(np.random.random(500)*0.4-0.2, index = [i for i in range(1,501)]) # randomly generates returns in a sensible range
parameters = fit_ARMA(data, 2, 3) # this returns the error

另外,我已经研究了以下问题:,但是我没有包括梯度,所以误差是不同性质的。

如果改为
init_params=np.random.random((p+q+1,))
?你能告诉我什么是
数据吗?@BlackBear:同样的错误occurs@Cleb:数据是一个单列数据框,以日期作为索引,以值形式返回。您能举个例子吗?!另外,请包括所有导入内容,这样复制和粘贴就更容易了。
import pandas as pd # version 0.23.4
import numpy as np # version 1.15.4
from scipy.optimize import minimize   # version 1.1.0

data = pd.DataFrame(np.random.random(500)*0.4-0.2, index = [i for i in range(1,501)]) # randomly generates returns in a sensible range
parameters = fit_ARMA(data, 2, 3) # this returns the error