Разница между Scipy 'beta.fit и собственной функцией - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть набор данных, который, как я полагаю, следует за бета-дистрибутивом.

enter image description here

Я знаю из
документов Сципи , что PDF бета-версиираспределение равно:

pdf = (gamma(a + b) * x ** (a - 1) * (1 - x) ** (b - 1)) / (gamma(a) * gamma(b))

Далее я проверяю с помощью функции beta.fit, какие значения параметров лучше всего соответствуют моему набору данных:

from scipy.stats import beta as beta_stats

parameters_beta = beta_stats.fit(players['Conversion'], floc=0, fscale=1)
print(parameters_beta)  

Это дает мне следующеевывод:

(4.6572518152560525, 36.09719571353918, 0, 1)

Итак, a равно ~ 4,66 и b равно ~ 36,10.

Теперь я хочу написать свою собственную функцию подгонки:

def loglike_beta(params, *args):
    a, b = params[0], params[1]
    x = args[0]

    pdf = (gamma(a + b) * x ** (a - 1) * (1 - x) ** (b - 1)) / (gamma(a) * gamma(b))
    return -1 * np.log(pdf).sum()


bounds = ((0, 1000), (0, 1000)) 
init_params = [10, 10]
res = minimize(loglike_beta, x0=init_params, args=players['Conversion'], 
method='L-BFGS-B', bounds=bounds, options={'disp': True, 'maxiter': 250})
print(res.x)

Выполнение этого дает следующий результат:

[  0.         425.88573367] 

Итак, a равно 0, а b равно ~ 426.Почему различия так велики?Я что-то не так делаю в своем сценарии?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...