[Bayes] Multinomials and Dirichlet distribution

From: https://www.cs.cmu.edu/~scohen/psnlp-lecture6.pdf 不错的PPT,图示很好。


 伯努利分布 和 多项式分布

Binomial Distribution的共轭先验Beta Distribution。

贝塔分布的范围符合色子的每一面的概率理解。

同理:

Multinomials Distribution的共轭先验Dirichlet Distribution。

 

Ref: https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.multinomial.html

>>> np.random.multinomial(20, [1/6.]*6, size=2)  # 做size=2次实验,一次是20次抛投
array([[3, 4, 3, 3, 4, 3],  # 第一次实验的结果:第一面出现了3次,第二面出现了4次,etc.
       [2, 4, 3, 4, 0, 7]])  # 第二次实验同理。

 

没法做图表示,维度太高了,大于了三维。第三维要留下来表示Pr。


 

狄利克雷分布:

Dirichlet分布可以看做是分布之上的分布。如何理解这句话,我们可以先举个例子:

  • 假设我们有一个骰子,其有六面,分别为{1,2,3,4,5,6}。现在我们做了10000次投掷的实验,得到的实验结果是六面分别出现了{2000,2000,2000,2000,1000,1000}次,如果用每一面出现的次数与试验总数的比值估计这个面出现的概率,则我们得到六面出现的概率,分别为{0.2,0.2,0.2,0.2,0.1,0.1}。
  • 我们想要做10000次试验,每次试验中我们都投掷骰子10000次。我们想知道,出现这样的情况使得我们认为,骰子六面出现概率为{0.2,0.2,0.2,0.2,0.1,0.1}的概率是多少(说不定下次试验统计得到的概率为{0.1, 0.1, 0.2, 0.2, 0.2, 0.2}这样了)。

这样我们就在思考骰子六面出现概率分布这样的分布之上的分布。

而这样一个分布就是Dirichlet分布

 

      

  • xi 代表每一面的概率。
  • 阿尔法是参数向量。
  • 以下B函数是为了归一化! 
  • 可以看出,每一个结果:(x1, x2... xn)都会相应地给出一个概率!

 

伽玛函数(Gamma函数),也叫欧拉第二积分,是阶乘函数在实数与复数上扩展的一类函数。

与之有密切联系的函数是贝塔函数(Beta函数),也叫第一类欧拉积分。可以用来快速计算同伽马函数形式相类似的积分。 

 长得比较诡异。

 

Ref: https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.dirichlet.html

一个三维的向量,随机抽取一个。每一维代表一个面的概率。

>>> s = np.random.dirichlet((10, 5, 3), 20)
>>> s
array([[ 0.52347182,  0.44608268,  0.0304455 ],
       [ 0.55583862,  0.35281005,  0.09135134],
       [ 0.49311777,  0.32315067,  0.18373157],
       [ 0.70968695,  0.22268722,  0.06762583],
       [ 0.60323203,  0.26006693,  0.13670104],
       [ 0.69403583,  0.21325088,  0.09271329],
       [ 0.53413248,  0.23281167,  0.23305585],
       [ 0.62858314,  0.18519664,  0.18622022],
       [ 0.52497339,  0.20176998,  0.27325663],
       [ 0.47283724,  0.39204232,  0.13512045],
       [ 0.66621238,  0.24627779,  0.08750983],
       [ 0.43605494,  0.46696468,  0.09698038],
       [ 0.41539035,  0.37153284,  0.21307682],
       [ 0.85737303,  0.11670994,  0.02591703],
       [ 0.53161652,  0.28426861,  0.18411488],
       [ 0.55155807,  0.16826288,  0.28017905],
       [ 0.45716724,  0.33973818,  0.20309457],
       [ 0.45320309,  0.26896615,  0.27783076],
       [ 0.80522192,  0.10022979,  0.09454829],
       [ 0.45790405,  0.42998929,  0.11210666]])

 

可见,参数某个比较大时,会出现一个高的相对稳定的概率峰值。

>>> s = np.random.dirichlet((10, 1, 1), 20)
>>> s
array([[ 0.8557684 ,  0.09807372,  0.04615788],
       [ 0.83456424,  0.03670665,  0.12872911],
       [ 0.73520196,  0.2017358 ,  0.06306224],
       [ 0.73759042,  0.18157695,  0.08083263],
       [ 0.89338746,  0.00237974,  0.1042328 ],
       [ 0.93393029,  0.01373741,  0.0523323 ],
       [ 0.96453549,  0.02562915,  0.00983536],
       [ 0.90688036,  0.02557378,  0.06754587],
       [ 0.96455728,  0.02084742,  0.01459531],
       [ 0.82136655,  0.07921894,  0.09941451],
       [ 0.78585535,  0.00286702,  0.21127763],
       [ 0.91597604,  0.0276861 ,  0.05633787],
       [ 0.90984927,  0.04313451,  0.04701622],
       [ 0.81386422,  0.08610383,  0.10003195],
       [ 0.92675313,  0.06861093,  0.00463594],
       [ 0.98362761,  0.00299704,  0.01337535],
       [ 0.90807198,  0.02043488,  0.07149314],
       [ 0.90418455,  0.07209613,  0.02371932],
       [ 0.9630694 ,  0.00459631,  0.03233429],
       [ 0.65105053,  0.05350025,  0.29544922]])

 

阿尔法和小一点,则less peaked:出现了些许不稳定,某一个Pr的垄断性不是特别强。

>>> s = np.random.dirichlet((5, 1, 1), 20)
>>> s
array([[ 0.7373676 ,  0.17431797,  0.08831443],
       [ 0.8022481 ,  0.02474368,  0.17300822],
       [ 0.90968516,  0.06022567,  0.03008917],
       [ 0.9011515 ,  0.02337192,  0.07547658],
       [ 0.98846934,  0.00932316,  0.0022075 ],
       [ 0.66322211,  0.24058232,  0.09619557],
       [ 0.86661876,  0.0542239 ,  0.07915735],
       [ 0.48498043,  0.25048716,  0.26453241],
       [ 0.79705359,  0.16538074,  0.03756567],
       [ 0.68670999,  0.17210651,  0.1411835 ],
       [ 0.65227745,  0.20477286,  0.1429497 ],
       [ 0.73701086,  0.15733187,  0.10565728],
       [ 0.68017492,  0.04459314,  0.27523195],
       [ 0.50579841,  0.42922063,  0.06498096],
       [ 0.71188347,  0.13582756,  0.15228897],
       [ 0.69952146,  0.08344366,  0.21703488],
       [ 0.39333132,  0.49440346,  0.11226522],
       [ 0.47531785,  0.21319548,  0.31148667],
       [ 0.67575678,  0.25481807,  0.06942515],
       [ 0.83958139,  0.08429426,  0.07612435]])

 

 

共轭,得到后验如下:

 

 

 

 

posted @ 2017-05-05 13:56  郝壹贰叁  阅读(618)  评论(0编辑  收藏  举报