计算任何给定实体将被选中的概率
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..,您可以为每个样本绘制不同的球)
我在一个袋子 (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..,您可以为每个样本绘制不同的球)