2015-06-20 7 views
3

Я использую EnumeratedIntegerDistribution для сгенерированных выборок из моего набора ключей.Как программно вычислить дискретные вероятности

Как программно вычислить массив дискретных вероятностей. Например, мне может понадобиться приблизительное «нормальное» распределение или распределение Zipf.

int[] keys = keyDomain(domainMin, domainMax); 
    double[] discreteProbabilities = new double[] { ?, ?, ?, ?, .... }; 

    EnumeratedIntegerDistribution distribution = new EnumeratedIntegerDistribution(keys, discreteProbabilities); 

    int numSamples = 100; 
    int[] samples = distribution.sample(numSamples); 
+0

Вы хотите, чтобы дискретные вероятности были случайными числами, взятыми из нормальное или Zipf-распределение? – paisanco

+0

ok дистрибутив Zipf, поэтому я хотел бы установить массив дискретных весов в значения, что приведет к тому, что массив образцов, подтверждающий распределение Zipf. Спасибо (при использовании) https:/com /) – dmc

ответ

1

Пока ваш дистрибутив действительно дискретно и определены над целыми числами в вашем диапазоне (например, распределение Пуассона), нет никаких проблем в назначении ваших discreteProbabilities [] массив до тех пор, пока у вас есть какие-то формулы вы может вычислять вероятности каждого целочисленного значения в вашем диапазоне, а затем, поскольку вы ограничиваете диапазон, вы делите назначенные вероятности на их сумму, чтобы получить истинное распределение по вашему диапазону, т. е. сумма = 1.

Однако, если ваше распределение является «непрерывным», то есть образцы могут быть любыми значениями с плавающей запятой/реальным числом в пределах диапазона или нет, тогда все сложнее. Вы должны решить, как преобразовать этот дистрибутив в дистрибутив по целым числам вашего диапазона. Один из способов - просто оценить функцию плотности вероятности (например, по существу exp (-x^2/2) для нормального распределения) по вашим целым значениям, а затем разделить на сумму по целочисленному диапазону. Однако это может быть не очень реалистичным, если вы предполагаете, например, что вы округляете образец до ближайшего целочисленного значения, чтобы получить ваше значение целых чисел. Если вы хотите это сделать, тогда вы должны вычислить интеграл от непрерывной плотности вероятности (например, с числовым интегрированием, если у вас нет формулы для антипроизводной), где интеграл между n-0.5 и n + 0.5 для каждого целого числа n в вашем диапазоне. Тогда это ваше значение вероятности для целого числа n и аналогично предыдущему, вы делите на сумму по целочисленному диапазону, чтобы ваши вероятности составляли до 1.

+0

да мое распределение дискретно, любая помощь с биткой «какой-то формулы для вычисления вероятностей»? Я хотел бы приблизиться к zipf или нормальному распределению. или любой другой стиль. Я ищу что-то, что может моделировать модель данных более реалистичным образом, предполагая ее случайность. и я не очень хорош в математике, спасибо – dmc