计算任何给定实体将被选中的概率

Calculating the probability that any given entity will be chosen

我在一个袋子 (A/B/C/D) 中有一组球,每个球都有一个指定的权重 ([0.1 0.3 0.1 0.2]),它描述了每个球被选中的相对概率。然后,我希望依次选择n每轮的球数,记录选择的球并将它们放回包中,为下一次迭代重置系统。

我对计算获得任何给定球的总体概率很感兴趣。

作为一个简单的例子,如果 n = 1

球 B - 0.3/(0.1+0.3+0.1+0.2) = 0.4286 = 球 B 将在 42.86% 的回合中被选中。

当 n = >1 时,问题就出现了。

例如,如果 n = 2 - 球 B 是在任何给定回合中被选中的球之一的概率是多少?

MATLAB 有没有办法计算出这样的信息?

这些信息不需要计算,它已经以权重的形式存在了。这些权重与概率成正比,如果你做到了 sum(weights)==1;因此,

probabilities = weights ./ sum(weights);

是您的解决方案。

随机近似的例子:

1/ 标准化您的权重向量,使其包含 Marcus Müller 在其回答中所述的概率

probabilities=weights/sum(weights);

2/ 现在假设我们有 P 个带有整数 {1,2,...,P} 的球索引,我们想在每个实验中绘制 n 个。我们需要做的是从集合{1,2,...,P}中得到无放回的随机样本,关于概率向量probabilities.

s1=datasample(1:P,n,'replace',false,'weights',probabilities)

这应该会根据您的概率给出样本。不过,您仍然需要做的是重复该过程足够多的次数,并计算每个球在您的样本中出现的次数,以计算您的概率。 (即

P(ballA)=Number of times ballA was in sample/Total Number of samples

类似于 :

TotalSamples=1000;
Res=zeros(TotalSamples,n);

for ii=1:TotalSamples

   Res(ii,:)=datasample(1:P,n,'replace',false,'weights',probabilities);


end

%% Prob ball A :

PA=sum(sum(Res==1))/TotalSamples;

%% Vector containing all probs :

FinalProbs=zeros(P,1);

for jj=1:P

FinalProbs(jj)=sum(sum(Res==jj))/TotalSamples;

end

运行 你这个例子,我得到的最终概率是:

%% TotalSamples=1000
FinalProbs =

0.3180
0.7310
0.3250
0.6260

%% TotalSamples=100000

FinalProbs =

0.3303
0.7440
0.3294
0.5964

请注意,您的概率之和大于 1 是完全正常的,因为事件不是不相交的(如果 n>1..,您可以为每个样本绘制不同的球)