Подтвердить что ты не робот

Присоединение точек данных к кумулятивному распределению

Я пытаюсь сопоставить гамма-распределение с моими точками данных, и я могу сделать это с помощью кода ниже.

import scipy.stats as ss
import numpy as np
dataPoints = np.arange(0,1000,0.2)
fit_alpha,fit_loc,fit_beta = ss.rv_continuous.fit(ss.gamma, dataPoints, floc=0)

Я хочу реконструировать большее распределение, используя множество таких небольших гамма-распределений (большее распределение не имеет значения для вопроса, только оправдывая, почему я пытаюсь поместить cdf в отличие от pdf).

Чтобы достичь этого, я хочу сопоставить кумулятивное распределение, а не PDF, с моими меньшими данными распределения. &mdash. Точнее, я хочу, чтобы данные были привязаны только к части кумулятивного распределения.

Например, я хочу, чтобы данные соответствовали только до тех пор, пока кумулятивная функция вероятности (с определенным масштабом и формой) не достигнет 0,6.

Любые мысли об использовании fit() для этой цели?

4b9b3361

Ответ 1

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

Наверное, имеет смысл, если ваше эмпирическое распределение мультимодально/сложно подытожить одним "глобальным" параметрическим распределением.

Не знаю, есть ли у вас конкретные причины специально устраивать несколько гамма-дистрибутивов, но в случае, если ваша цель - попытаться соответствовать распределению, которое относительно гладко и захватывает ваш эмпирический cdf, возможно, вы можете взглянуть на плотность ядра Оценка. Это, по сути, непараметрический способ подгонки дистрибутива к вашим данным.

http://scikit-learn.org/stable/modules/density.html http://en.wikipedia.org/wiki/Kernel_density_estimation

Например, вы можете опробовать гауссовское ядро ​​и изменить параметр полосы пропускания, чтобы контролировать, насколько он сглажен. Слишком маленькая полоса пропускания приводит к негладному ( "избыточному" ) результату (высокая дисперсия, низкое смещение). Слишком большая полоса пропускания приводит к очень плавному результату, но с большим уклоном.

from sklearn.neighbors.kde import KernelDensity
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(dataPoints) 

Хороший способ выбрать параметр пропускной способности, который уравновешивает смещение - дисперсия - это использование перекрестной проверки. По сути, идея высокого уровня заключается в том, что вы разбиваете свои данные, выполняете анализ на обучающем наборе и "проверяете" на тестовом наборе, это предотвратит переуплотнение данных.

К счастью, sklearn также реализует хороший пример выбора наилучшей пропускной способности Guassian Kernel с использованием Cross Validation, с помощью которого вы можете заимствовать код:

http://scikit-learn.org/stable/auto_examples/neighbors/plot_digits_kde_sampling.html

Надеюсь, это поможет!