У меня есть набор экспериментальных значений, и я хочу найти функцию, которая лучше описывает их распределение. Но в процессе обработки некоторыми функциями я обнаружил, что scipy.optimize.curve_fit и scipy.stats.rv_continuous.fit дают очень разные результаты, обычно не в пользу последнего. Вот простой пример:Почему оценка параметров максимального правдоподобия для распределений scipy.stats так плохо работает?
#!/usr/bin/env python3
import numpy as np
from scipy.optimize import curve_fit as fit
from scipy.stats import gumbel_r, norm
import matplotlib.pyplot as plt
amps = np.loadtxt("pyr_11.txt")*-1000 # http://pastebin.com/raw.php?i=uPK31JGE
argsGumbel0 = gumbel_r.fit(amps)
argsGauss0 = norm.fit(amps)
bins = np.arange(60)
probs, binedges = np.histogram(amps, bins=bins, normed=True)
bincenters = 0.5*(binedges[1:]+binedges[:-1])
argsGumbel1 = fit(gumbel_r.pdf, bincenters, probs, p0=argsGumbel0)[0]
argsGauss1 = fit(norm.pdf, bincenters, probs, p0=argsGauss0)[0]
plt.figure()
plt.hist(amps, bins=bins, normed=True, color='0.5')
xes = np.arange(0, 60, 0.1)
plt.plot(xes, gumbel_r.pdf(xes, *argsGumbel0), linewidth=2, label='Gumbel, maximum likelihood')
plt.plot(xes, gumbel_r.pdf(xes, *argsGumbel1), linewidth=2, label='Gumbel, least squares')
plt.plot(xes, norm.pdf(xes, *argsGauss0), linewidth=2, label='Gauss, maximum likelihood')
plt.plot(xes, norm.pdf(xes, *argsGauss1), linewidth=2, label='Gauss, least squares')
plt.legend(loc='upper right')
plt.show()
Разница в производительности варьируется от драматической к мягким, но в моем случае это всегда присутствует. Почему это так? Как выбрать наиболее подходящий метод оптимизации для случая?
Различные оптимизации вычисляют разные вещи, поэтому это скорее вопрос статистики, чем вопрос stackoverflow. Это не тот случай, когда оба оптимизатора пытаются оптимизировать одну и ту же функцию и имеют лучшую производительность, чем другие. –
@ von-m, что я понимаю. Когда я говорю о производительности, я имею в виду настоящую доброту. Вопрос в том, как выбирать между оптимизаторами? Я в каких случаях максимальная вероятность дает более близкую посадку, чем наименьшие квадраты (и наоборот)? – Axon