Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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最小化函数_Python_Optimization_Scipy_Minimization - Fatal编程技术网

Python 使用scipy最小化函数

Python 使用scipy最小化函数,python,optimization,scipy,minimization,Python,Optimization,Scipy,Minimization,我有一个loglikelion函数,它是一个很长的客户列表的和,一些单独的loglikelion函数,我想使用scipy.optimize.minimize()方法对它进行优化 def log_似然_个体(r、alpha、a、b、x、tx、t): ln_a1=gammaln(r+x)-gammaln(r)+r*log(alpha) ln_a2=gammaln(a+b)+gammaln(b+x)-gammaln(b)-gammaln(a+b+x) ln_a3=-(r+x)*对数(α+t) a4=0

我有一个loglikelion函数,它是一个很长的客户列表的和,一些单独的loglikelion函数,我想使用scipy.optimize.minimize()方法对它进行优化

def log_似然_个体(r、alpha、a、b、x、tx、t):
ln_a1=gammaln(r+x)-gammaln(r)+r*log(alpha)
ln_a2=gammaln(a+b)+gammaln(b+x)-gammaln(b)-gammaln(a+b+x)
ln_a3=-(r+x)*对数(α+t)
a4=0
如果x>0:
a4=exp(对数(a)-log(b+x-1)-(r+x)*对数(α+tx))
返回ln_a1+ln_a2+日志(exp(ln_a3)+a4)
def记录可能性(r、阿尔法、a、b、客户):

如果r一般性问题引发一般性答案;)

由于条件初始值较差,我的大多数拟合尝试都失败(即不收敛)。问问自己:

  • params0=np.array([1,1,1,1.])
    真的是一个很好的初始猜测吗
  • 您是否也尝试过
    params0=np.array([0,0,0,0.])
    或任何其他组合(暴力)
  • 您能否创建一个示例集,让您知道参数的理想值?你试过装它吗

如果上述问题都无法解决,那么问题似乎更复杂,但90%的拟合问题都可以通过回答上述问题来解决。

感谢您的建议,确实参数并不理想,我对其进行了一点修改,但我仍然没有得到任何结果,因为我的猜测完全是经验性的。目前我最好的猜测是:[2.5,10,0.001,10]那么,一个测试子集如何?创建一组可能有10个客户的集合,您知道结果应该是什么。它收敛吗?如果收敛,拟合参数是否接近已知的最佳拟合?谢谢你的建议,我会尝试。如果解决方案适合你,请其他用户查看是否存在解决方案。非常感谢。
def log_likelihood_individual(r, alpha, a, b, x, tx, t):
    ln_a1 = gammaln(r + x) - gammaln(r) + r * log(alpha)
    ln_a2 = gammaln(a + b) + gammaln(b + x) - gammaln(b) - gammaln(a + b + x)
    ln_a3 = -(r + x) * log(alpha + t)
    a4 = 0
    if x > 0:
        a4 = exp(log(a) - log(b + x - 1) - (r + x) * log(alpha + tx))
    return ln_a1 + ln_a2 + log(exp(ln_a3) + a4)


def log_likelihood(r, alpha, a, b, customers):
    if r <= 0 or alpha <= 0 or a <= 0 or b <= 0:
        return -np.inf
    c = sum([log_likelihood_individual(r, alpha, a, b, x, tx, t) for x, tx, t in customers])
    return c


def maximize(customers):
    negative_ll = lambda params: -log_likelihood(*params, customers=customers)
    params0 = np.array([1., 1., 1., 1.])
    res = minimize(negative_ll, params0, method='CG')
    return res