机器学习-概率分布-多项式分布
上面介绍了伯努利分布,下面接着介绍一种更为复杂的情况。本质上伯努利分布描述的是抛硬币的过程,现在我们考虑掷骰子的情况。骰子有六面,每一面的点数分别为: 1,2,3,4,5,6 。一般情况下,我们投骰子每一面的概率都是一样的——都是 16 。但也有特殊的情况,曾经有段时间,香港电影流行赌博主题的电影(《赌神》,不小心暴露的年龄…),里面有一个很low的老千,在骰子上做了手脚,使得某一面出现的概率增大。言归正传,我们假设每一面的出现的概率是不一样的。这一类型的概率分布充为多项式分布
这里我们引入一种one-hot的表示形式。设
x
为
K
维向量,其中只有一个维度的值为
设有
N
个服从该分布的样本
上式中, xnk 表示 xn 的第 k 维。
同样的,通过最大化对数似然
上式对 uk 求导,并令其为0,可得:
考虑到约束 ∑Kk=1uk=1 ,可得到:
所以:
用python来实现上述的参数估计过程,用scipy包中的multinomial分布来生成样本,再根据这些样本估计multinomial分布的参数。实现起来还是非常容易的。
代码
估计伯努利分布的参数:
from scipy.stats import multinomial
import numpy
X=multinomial.rvs(n=1,p=[0.4,0.5,0.1],size=100000) #根据伯努利分布来生成样本#
u = numpy.mean(X,axis=0);#用样本来估计参数#
print(u)