我有一组球(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有没有办法计算出这些信息?
答案 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);
是你的解决方案。