计算任何给定实体的选择概率

时间:2015-10-19 10:40:05

标签: matlab probability combinatorics

我有一组球(127.0.0.1:5000),每个球都有一个指定的重量A/B/C/D,它描述了每个球的选择相对于另一个球的相对概率。然后我希望每轮选择([0.1 0.3 0.1 0.2])个球数顺序,记录选中的球并将它们放回包中,重置系统以进行下一次迭代。

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

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

B球 - n = 0.3/(0.1+0.3+0.1+0.2) = B球将在42.86%的比赛中被选中。

当n => 1时会出现并发症。

例如,如果n = 2 - 球B在任何一轮中选择的球之一的概率是多少?

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

2 个答案:

答案 0 :(得分:2)

随机近似的一个例子:

1 /归一化你的权重向量,使其包含MarcusMüller在回答中所述的概率

probabilities=weights/sum(weights);

2 /现在我们假设我们有P个带有整数{1}}的球索引,我们希望每次实验都绘制{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

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

答案 1 :(得分:0)

这些信息不需要计算,它已经以权重的形式存在。这些权重与概率成正比,如果您只是按sum(weights)==1,那么您实际上具有概率;因此,

probabilities = weights ./ sum(weights);

是你的解决方案。