gpt4 book ai didi

java - 如何以编程方式计算离散概率

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:59 27 4
gpt4 key购买 nike

我正在使用 EnumeratedIntegerDistribution 从我的 key 集生成样本。

如何以编程方式计算“离散概率”数组。例如,我可能想要近似的“正态”分布或 Zipf 分布。

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

EnumeratedIntegerDistribution distribution = new EnumeratedIntegerDistribution(keys, discreteProbabilities);

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

最佳答案

只要您的分布是真正离散的并且定义在您范围内的整数上(例如泊松分布),分配您的 discreteProbabilities[] 数组就没有问题,只要您有某种可以计算的公式范围内每个整数值的概率,然后由于您将范围限制在范围内,因此您将分配的概率除以它们的总和,以便获得范围内的真实分布,即总和 = 1。

但是,如果您的分布是“连续的”,即样本可以是范围内或不范围内的任何浮点/实数值,那么事情就更复杂了。您必须决定如何将此分布转换为范围内整数的分布。一种方法是简单地评估整数值的概率密度函数(例如,本质上是正态分布的 exp(-x^2/2) ),然后除以整数范围内的总和。但是,如果您假设例如您正在将样本舍入到最接近的整数值以获得采样整数值。如果你想这样做,那么你应该计算连续概率密度的积分(比如,如果你没有反导数的公式,则使用数字积分),其中积分在 n-0.5 和 n+ 之间范围内的每个整数 n 为 0.5。那么这就是整数 n 的概率值,与之前类似,除以整数范围内的总和,使概率加起来为 1。

关于java - 如何以编程方式计算离散概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955308/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com