我想生成符合实际采样数据分布的伪数据。在C / Obj-C中寻找一种高效准确的iphone开发方法。目前,已经为1000个采样事件中的60个不同类别的出现分配了概率(0-1)。我想生成1000个符合相同概率的新事件。
我有一个{1,2,...,60}集的分类。据我所知,此分布的样本将符合每个类别的概率。因此,我需要从此分布中获取1000个样本。我已经确定(感谢迄今为止的答案)我需要:
通过对值进行求和并将每个值相除来对此分布进行归一化 总和。
订购它们。
通过将每个值替换为所有先前值的总和来创建CDF。
然后,我可以生成0到1之间的均匀随机数,并在CDF中找到其值小于或等于刚刚选择的数字的最大数字,并返回与此CDF值对应的类别。
的 Q1 即可。这是解决问题的正确方法吗?
Q2 即可。需要注意的是,我正在使用NSDecimals来存储类别概率。 Cocoa或Math.h中是否有可用的库或函数,我可以用它来做到这一点?我愿意尝试新的库,目前在这个项目中只有Core-Plot和标准的Cocoa库。感谢。
答案 0 :(得分:1)
您的问题描述不清楚。但听起来你正在寻找inverse transform sampling。
基本上,您首先需要生成与原始数据相对应的cumulative distribution function (CDF);称之为F(x)。然后生成0-> 1范围内的均匀随机数据,然后使用逆CDF对其进行变换,即F -1 (x)。
答案 1 :(得分:0)
这是我的建议。这假设当你说“归一化概率”时,你的意思是所有类型的概率之和为1.(如果不是,你需要重新缩放,以便就是这种情况。)
如果你这样做1000次,我相信你会得到你正在寻找的发行版。