У меня есть набор данных, который, как я полагаю, следует за бета-дистрибутивом.
Я знаю из
документов Сципи , что 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.Почему различия так велики?Я что-то не так делаю в своем сценарии?
Спасибо!