机器学习之概率分布2

机器学习-概率分布-多项式分布

上面介绍了伯努利分布,下面接着介绍一种更为复杂的情况。本质上伯努利分布描述的是抛硬币的过程,现在我们考虑掷骰子的情况。骰子有六面,每一面的点数分别为: 1,2,3,4,5,6 。一般情况下,我们投骰子每一面的概率都是一样的——都是 16 。但也有特殊的情况,曾经有段时间,香港电影流行赌博主题的电影(《赌神》,不小心暴露的年龄…),里面有一个很low的老千,在骰子上做了手脚,使得某一面出现的概率增大。言归正传,我们假设每一面的出现的概率是不一样的。这一类型的概率分布充为多项式分布

这里我们引入一种one-hot的表示形式。设 x K 维向量,其中只有一个维度的值为1,其余为 0 。设xk表示向量 x 的第 k 维,比如只有第三维的值x3 1 ,那么x=(0,0,1,0,0,0)T。对应掷骰子的情况。 (1,0,0,0,0,0)T 表示第1面, (0,1,0,0,0,0)T 表示第2面,…,依次类推。设每一面出现的概率为 uk uk 满足 0uk1,Kk=1uk=1 。那么投掷一次骰子,变量 x 的概率为:

p(x|u)=k=1Kuxkk

设有 N 个服从该分布的样本D={x1,x2,,xN},那么概率似然为:

p(D|μ)=n=1Np(xn|u)=n=1Nk=1Kuxnkk=k=1KuNn=1xnkk

上式中, xnk 表示 xn 的第 k 维。
同样的,通过最大化对数似然lnp(D|u)可以求得参数 u 。当然由于 u 需满足 Kk=1uk=1 ,因此可以引入拉格朗日乘子。
k=1K(n=1Nxnk)lnuk+λ(k=1Kuk1)

上式对 uk 求导,并令其为0,可得:
uk=Nn=1xnkλ

考虑到约束 Kk=1uk=1 ,可得到:
λ=n=1Nk=1Kxnk=N

所以:
uk=Nn=1xnkN

用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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值