【发布时间】:2017-08-03 01:01:13
【问题描述】:
我想用最大似然法将六个参数拟合到非常丑陋的分布函数中。为此,我尝试使用scipy.optimize.minimize。
这是一段代码
import math
form scipy.optimize import minimize
import numpy as np
#generate some data
xdata = np.random.lognormal(0,1,812)
#function for the Log likelihood
def mfpdf2(params):
c1 = params[0]
A1 = params[1]
a1 = params[2]
c2 = params[3]
A2 = params[4]
a2 = params[5]
LL_vec = [math.log(c1*(math.exp(-A1*x) - math.exp(-a1*x))+c2*(math.exp(-A2*x) - math.exp(-a2*x))) for x in xdata]
LL = -sum(LL_vec)
return LL
#try to find max likelihood (minimize negative loglikelihood)
start_params = [1,1,2,1,1,2]
pars = minimize(mfpdf2, start_params)
这段代码返回一个错误:
File "C:/Users/Robert/Desktop/python/pokusy_analyza_multiexp.py", line 79, in <listcomp>
LL_vec = [math.log(c1*(math.exp(-A1*x) - math.exp(-a1*x))+c2*(math.exp(-A2*x) - math.exp(-a2*x))) for x in xdata]
ValueError: math domain error
我做错了什么?
【问题讨论】:
-
仅供参考:您的 PDF 未标准化。 PDF 在域上的积分必须为 1。当您尝试最小化负数时,这将导致问题。对数似然。目标函数可能没有最小值。