Сципи оптимизирует, не повторяет - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть упорядоченная статистическая выборка D10, D50, D90. И я хочу найти логнормальное распределение, которое наилучшим образом соответствует этим значениям. Для этого мне нужно найти совместное распределение вероятностей для этих выборок, а затем максимизировать его относительно его параметров, чтобы получить наилучшее соответствие моих значений. Однако при использовании функции scipy.optimize.minimize возникают проблемы.

Код выглядит следующим образом.

import numpy as np 
import matplotlib.pyplot as plt
from scipy import special
from scipy import optimize  

osample = [8,11,18] #ordered D10, D50, D90 sample
num = 3

def lnpdf(x,mu,sigma): #lognormal probability distribution function
    d = 1/(x*sigma*np.sqrt(2*np.pi))*np.exp(-0.5*(np.log(x) - mu)**2/sigma**2)
    return d

def jpdfo(mu,sigma): #joint probability distributions of ordered statistic
    p = 1
    for i in osample:
        p *= lnpdf(i,mu,sigma)
    p = np.math.factorial(num)*p
    return p

def nll(param): # negative log likelihood
    val = -jpdfo(param[0],param[1])
    return val

#minimize the nll
x0 = [10,3]
res = optimize.minimize(nll,x0,method="CG")
print(res)

Получается следующее:

     fun: -6.640153770326941e-10
     jac: array([ 1.66979881e-09, -3.54323673e-09])
 message: 'Optimization terminated successfully.'
    nfev: 4
     nit: 0
    njev: 1
  status: 0
 success: True
       x: array([10.,  3.])

Как видите, он не повторяется, и выходные результаты точно совпадают с входными результатами. Что я делаю не так с этой функцией?

...