Scipy: логнормальная подгонка

Было довольно много сообщений о работе с распределением lognorm со Scipy, но я до сих пор не понимаю его.

Параметр lognormal 2 обычно описывается параметрами \mu и \sigma которые соответствуют Scipys loc=0 и \sigma=shape , \mu=np.log(scale) .

В scipy, lognormal distribution – parameters , мы можем прочитать, как сгенерировать lognorm(\mu,\sigma) используя экспоненту случайного распределения. Теперь попробуем что-то еще:

A)

В чем проблема с созданием lognorm напрямую:

 # lognorm(mu=10,sigma=3) # so shape=3, loc=0, scale=np.exp(10) ? x=np.linspace(0.01,20,200) sample_dist = sp.stats.lognorm.pdf(x, 3, loc=0, scale=np.exp(10)) shape, loc, scale = sp.stats.lognorm.fit(sample_dist, floc=0) print shape, loc, scale print np.log(scale), shape # mu and sigma # last line: -7.63285693379 0.140259699945 # not 10 and 3 

B)

Я использую возвращаемые значения подгонки для создания установленного дистрибутива. Но опять-таки я что-то сделаю неправильно:

 samp=sp.stats.lognorm(0.5,loc=0,scale=1).rvs(size=2000) # sample param=sp.stats.lognorm.fit(samp) # fit the sample data print param # does not coincide with shape, loc, scale above! x=np.linspace(0,4,100) pdf_fitted = sp.stats.lognorm.pdf(x, param[0], loc=param[1], scale=param[2]) # fitted distribution pdf = sp.stats.lognorm.pdf(x, 0.5, loc=0, scale=1) # original distribution plt.plot(x,pdf_fitted,'r-',x,pdf,'g-') plt.hist(samp,bins=30,normed=True,alpha=.3) 

lognorm

  • SciPy интерполяция большой матрицы
  • Переносные векторы смещения среди множества точек
  • Формула Планков для спектра Blackbody
  • Обновление начального условия в решателе ODE каждый раз
  • Как включить ограничение на решение функции Scipy NNLS, чтобы оно суммировалось до 1
  • Кто-нибудь использовал SciPy с IronPython?
  • Как вернуть стоимость, grad как кортеж для функции fmin_cg scipy
  • Как преобразовать матрицу совпадения в разреженную матрицу
  • 3 Solutions collect form web for “Scipy: логнормальная подгонка”

    Я делал те же наблюдения: в большинстве случаев сбой во всех параметрах заканчивается. Вы можете помочь, предложив лучшую начальную догадку, при этом исправление параметра не требуется.

     samp = stats.lognorm(0.5,loc=0,scale=1).rvs(size=2000) # this is where the fit gets it initial guess from print stats.lognorm._fitstart(samp) (1.0, 0.66628696413404565, 0.28031095750445462) print stats.lognorm.fit(samp) # note that the fit failed completely as the parameters did not change at all (1.0, 0.66628696413404565, 0.28031095750445462) # fit again with a better initial guess for loc print stats.lognorm.fit(samp, loc=0) (0.50146296628099118, 0.0011019321419653122, 0.99361128537912125) 

    Вы также можете создать свою собственную функцию для вычисления первоначального предположения, например:

     def your_func(sample): # do some magic here return guess stats.lognorm._fitstart = your_func 

    Я понял свои ошибки:

    A) Образцы, которые я рисую, должны исходить из метода .rvs . Например: sample_dist = sp.stats.lognorm.rvs(3, loc=0, scale=np.exp(10), size=2000)

    B) У подгонки есть некоторые проблемы. Когда мы исправляем параметр loc пригонка намного лучше. param=sp.stats.lognorm.fit(samp, floc=0)

    Эта проблема была исправлена ​​в новых версиях scipy. После обновления scipy0.9 до scipy0.14 проблема исчезнет.

    Python - лучший язык программирования в мире.