我想创建一个概率生成器,它将根据先验概率在一定数量的选项之间进行选择。例如,假设我想根据以下先验概率在 A、B 和 C 之间进行随机选择:
P(A) = .4
P(B) = .5
P(C) = .1
那么,如何创建一个随机生成器,它将根据上述概率随机生成 A、B 或 C?
编辑:对不起,我忘了补充项目的数量,它们的概率并不总是相同的。所以,它不会总是像上面那样只有三个项目。它将是一个 Mx2 矩阵,其中 M 是项目数,第二列(概率)的总和为 1。
我很困惑,但你的意思是 M,但如果 P 是概率矩阵,这是我的看法:
cumP = cumsum (P);
ind = find(cumP>rand, 1, 'first');
sol = P(ind);
p=rand;
probs_vector=[.4 .5 .1];
current_prob=probs_vector(1);
index=1;
while (current_prob<p)
index=index+1;
current_prob=current_prob+probs_vector(index)
end
需要进行一些基本检查以确保向量加起来为 1 而不是更高/更低,以防止无限循环等,但我将把这些细节留给你。index
是输出。
如果 P 是长度为 N 的概率向量,那么您可以使用一行代码从中返回一个样本:
out = 1 + sum( rand() > cumsum(P) );
这将根据 P 中的概率返回一个从 1 到 N 的整数。