【问题标题】:Generate pseudo sample of population given probabilities在给定概率的情况下生成人口的伪样本
【发布时间】:2012-06-07 23:15:06
【问题描述】:

我想生成符合实际采样数据分布的伪数据。在 C/Obj-C 中寻找一种高效且准确的方法来进行 iphone 开发。目前,已为 1000 个采样事件中 60 个不同类别的发生分配了概率 (0-1)。我想生成 1000 个符合相同概率的新事件。

澄清{

我有一个集合 {1,2,...,60} 的分类分布。我了解此分布中的样本将符合每个类别的概率。因此我需要从这个分布中抽取 1000 个样本。我已经确定(感谢到目前为止的答案)我需要:

  1. 通过将值相加并除以每个值来规范化此分布 按总和。

  2. 订购它们。

  3. 通过将每个值替换为所有先前值的总和来创建 CDF。

  4. 然后我可以生成一个介于0和1之间的均匀随机数,并在CDF中找到其值小于或等于刚刚选择的数的最大数,并返回这个CDF值对应的类别。

    }

第一季度。这是解决问题的正确方法吗?

第二季度。需要注意的是,我使用 NSDecimals 来存储类别概率。 Cocoa 或 Math.h 等中是否有任何可用的库或函数可以用来简单地执行此操作?我愿意尝试新的库,目前这个项目中只有 Core-Plot 和标准 Cocoa 库。谢谢。

【问题讨论】:

  • 您的描述不清楚。您是说您有一个现有的 PDF(或至少是一个直方图),并且您想生成符合该 PDF/直方图的新随机数据?
  • 更新了问题以进一步澄清。

标签: c cocoa random distribution sample


【解决方案1】:

您的问题描述不清楚。但听起来你正在寻找inverse transform sampling

基本上,你首先需要生成一个与你的原始数据对应的cumulative distribution function (CDF);称它为 F(x)。然后生成 0->1 范围内的均匀随机数据,然后使用逆 CDF 对其进行变换,即 F-1(x)。

【讨论】:

  • 谢谢。根据这个答案,我再次澄清了我的问题。
【解决方案2】:

这是我的建议。这假设当您说“归一化概率”时,您的意思是所有类型的概率之和为 1。(如果不是,则需要重新调整比例。)

  • 为您的 60 种类型制作一些订单。 (比如说,字母。)
  • 生成一个介于 0 和 1 之间的随机数。(称其为您的“目标”。)
  • 创建一个累加器,初始值为 0。
  • 循环浏览您的 60 种类型。对于每种类型:
    • 将此类事件的概率添加到您的累加器中。
    • 如果您的累加器 >= 您的目标,则生成该类型的事件并停止。

如果你这样做 1000 次,我相信你会得到你正在寻找的分布。

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 2010-11-01
    • 2020-01-10
    • 1970-01-01
    • 2020-06-22
    • 2016-01-06
    • 2021-01-08
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多