在统计学中,把从概率分布中抽取样本的过程称为抽样。将概率分配给一些离散选择的分布称为多项分布。
一个多项分布的模拟实验
我们做一个实验,从公平的骰子的一次投掷出现的点数中抽样。
上面的代码做了一个模拟实验。首先使用from torch.distribution import multinomial 导入需要的多项式数据包。然后,创建了一个概率分布fair_probs,这个分布是一个一维张量(向量),有六个值,每个值都是0.1667,接下来,调用multinomial.Multinomial()对fair_probs进行抽样,第一个参数10表示抽样10次,实验结果用test保存。test[i]的值表示在10次抽样中fair_prob[i]的概率对应的东西(这里为骰子的点数)出现的次数。fair_probs[i]可以理解为某东西属于第i类的概率,在这里,是骰子的点数为i+1的概率。
以上代码只做了一组实验,接下来,我们做500组实验,并将每个点数出现的概率计算出来:
通过对sample()传入参数(500,),进行500组实验。这里面用cum_counts = counts.cumsum(dim=0)来记录每一个点数截至目前为止的实验总的出现频次的变化。接下来用这个总的出现频次除以总的实验次数,得到每一个点数的出现概率:
注意,这里面cum_counts.sum(dim=1,keepdims=True)很巧妙,可以准确地计算出截至每一组实验时,总的抽样次数:
keepdims=True是必要的。因为如果不加keepdims=True,实现的是降维的求和,求和结果cum_counts.sum()将是一维的(横着的),即,若代码为estimate = cum_counts / cum_counts(dim=1),这样在广播计算时,将得到错误的总实验次数。
注意,每组实验抽样10个,做500组,和做一组实验抽样5000个的区别在于:前者得到的是一个二维张量,有每组实验的情况;而后者得到的是一个一维张量(向量),为5000次实验的结果。
标签:抽样,概率,实验,005,点数,cum,counts From: https://www.cnblogs.com/pkuqcy/p/17398043.html