近期一直有点小忙,可是不知道在瞎忙什么,最终有时间把Beta分布的整理弄完。

以下的内容。夹杂着英文和中文,呵呵~

Beta Distribution

Beta Distribution Definition:

The Beta distribution is a special case of the Dirichlet distribution, and is related to the Gamma distribution. It has the probability distribution function:

这里。由于Beta分数是二项分布的參数p的概率分布, 所以x(即p)的取值范围为0 <= x <= 1

where the normalisation, B, is thebeta function, Beta function could also be expressed by Gamma function:

Gamma函数 在实数域能够表示为:

Gamma函数 在整数域能够表示为:

Γ(n)=(n−1)!

Gamma函数有以下性质:

由于Beta函数能够表示为Gamma函数。所以Beta分布还能够表示为:

0 <= x <= 1

Beta分布能够理解为二项分布的參数p的分布,所以,这里又一次定义Beta分布:

Beta分布的期望:

Beta分布的方差:

Beta分布的 众数 mode:

Beta分布的偏度 Skewness:

Beta分布的 峰度 Kurtosis:

Beta Distribution Examples

Beta分布能够说是一个百变星君。依据參数a,b的不同,能够呈现出多种全然不同的概率分布图.

生成Beta分布的代码:

from scipy.stats import beta
import matplotlib.pyplot as plt
import numpy as np a, b = 2, 1 mean, var, skew, kurt = beta.stats(a, b, moments='mvsk') x = np.linspace(0, 1, 100)
plt.plot(x, beta.pdf(x, a, b), 'r-', lw=5, alpha=0.6, label='beta pdf')
plt.show()

然后,依据调整代码中的a,b的取值,能够得到不同的Beta分布:

a, b = 2, 1:

a, b = 2, 2

a, b = 8, 2

a, b = 0.01, 20

a, b = 1, 1

这样一个一个的绘制。是不是太逊了, 画在一起:

代码:

from scipy.stats import beta
import matplotlib.pyplot as plt
import numpy as np x = np.linspace(0, 1, 100) a_array = [1, 2, 4, 8]
b_array = [1, 2, 4, 8] fig, axarr = plt.subplots(len(a_array), len(b_array)) for i, a in enumerate(a_array):
for j, b in enumerate(b_array):
axarr[i, j].plot(x, beta.pdf(x, a, b), 'r', lw=1, alpha=0.6, label='a='+str(a)+',b='+str(b))
axarr[i, j].legend(frameon=False) plt.show()

将全部的Beta分布绘制在一个图上:

代码:

from scipy.stats import beta
import matplotlib.pyplot as plt
import numpy as np x = np.linspace(0, 1, 100) a_array = [1, 2, 4, 8]
b_array = [1, 2, 4, 8] for i, a in enumerate(a_array):
for j, b in enumerate(b_array):
plt.plot(x, beta.pdf(x, a, b), lw=1, alpha=0.6, label='a='+str(a)+',b='+str(b)) plt.legend(frameon=False)
plt.show()

Beta Mean

由公式能够得到,Beta分布的均值,也能够通过採样的方法,在一个Beta分布中,採样,计算均值。

代码:

import numpy as np
import numpy.random as nprnd
import scipy.stats as spstat
import scipy.special as ssp
import itertools as itt import matplotlib.pyplot as plt
import pylab as pl N = (np.arange(200) + 3) ** 2 * 20 betamean = np.zeros_like(N, dtype=np.float64) for idx, i in enumerate(N):
betamean[idx] = np.mean(nprnd.beta(2, 1, i)) plt.plot(N, betamean, color='steelblue', lw=2)
plt.xscale('log')
plt.show() print spstat.beta(2, 1).mean() print spstat.beta(2, 1).mean(), 2.0 / (2 + 1)
print spstat.beta(2, 1).var(), 2 * 1.0 / (2 + 1 + 1) / (2 + 1) ** 2

执行结果:

这里能够看到,随着採样点的添加。样本点的均值也就更加的收敛。更加的接近⅔,  ⅔ 是一个通过公式计算得到的。 这样,这个图片的结果也符合大数定理,随着採样点的添加。仅仅要样本点无限大。那么最终的均值就会无限的接近⅔.

Conjugate Prior

A conjugate prior,p(p), of a likelihood, p(x|p), is a distribution that results in a posterior distribution, p(p|x)with the same functional form as the prior
and a parameterisation that incorporates the observationx.

这句话,猛的一读,晕头转向,可是,细致读上三五遍,基本上就理解了什么叫“共轭先验”。

基本上说,一个參数的共轭先验p(p)是这种一个分布:在这个分布的基础上加上观測样本能够得到一个与先验分布具有同样的函数形式的后验概率分布p(p|x),而且这个后验概率分布p(p|x)融合了观測样本x

也就是说共轭先验p(p)和后验概率分布p(p|x)具有相当的函数形式。

说点人话吧。。。

Beta分布是二项分布的參数p的共轭先验。也就是说,二项分布的參数p的共轭先验是一个Beta分布,当中,Beta分布中的两个參数a,b能够看作两个二项分布的參数p的先验知识,能够称为伪计数,比如
a, b = 2, 1, 这就意味着,二项分布的參数p的先验知识为:在三次实验中,a出现两次,b出现1次,也能够理解为发生了2次,没有发生的有1次。

后验概率也符合Beta分布:

Beta(p|a, b) + count(m1, m2) = Beta(p| a+m1, b+m2)

在二项分布的參数的先验分布的基础上,加上观測数据。就能够得到二项分布的參数p的后验概率分布也符合Beta分布。这里,
m1, m2 分别表示相应于 x=1 和 x=0在观測数据中出现的次数。

话说,共轭先验中的參数即Beta分布中的两个參数a,b 是很有意义的hyperparameter的解释。前面已经提到了,a,b
能够理解为在观測样本 (m1, m2)的基础上的先验知识,或者能够理解为伪计数,即在我们的先验知识中, x=1和x=0分别应该出现多少次。而且。这个先验知识的取值,对于后验概率的计算有比較大的影响。

二项分布的參数p的后验概率分布仍然符合Beta分布能够通过以下的公式推到进行证明:

以下给出上面公式的推导过程:

假定集合C是服从N Bernoulli分布的一个集合。当中c=1或者c=0。那么能够依据贝叶斯參数预计计算集合C
的后验參数预计:

所以,由上面的推导能够证明二项分布的參数p的后验概率分布也服从Beta分布。

当中。上面公式中的Z能够进行例如以下推导:


公式2中用到了一个Beta分布的公式Beta函数:

所以,公式2中

Beta分布从入门到精通的更多相关文章

  1. 8、ASP.NET MVC入门到精通——View(视图)

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...

  2. Android Studio教程从入门到精通

    最新2.0系列文章参考: Android Studio2.0 教程从入门到精通Windows版 - 安装篇Android Studio2.0 教程从入门到精通Windows版 - 入门篇Android ...

  3. Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步

    Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述     PV操作是对信号量进行的操作.     进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...

  4. 【转载】google搜索从入门到精通

    原文地址:http://www.cnblogs.com/helloIT/articles/5095668.html /***************************************** ...

  5. 《java从入门到精通》学习记录

    目录 <Java从入门到精通>学习记录 3 基础的基础部分: 3 一. 常量与变量 3 1. 掌握: 3 (1) .常量与变量的声明方式: 3 (2) .变量的命名规则: 3 (3) .变 ...

  6. ARKit从入门到精通(11)-ARKit开发常见问题及解决方案

    转载请注明出处:ARKit从入门到精通(11)-ARKit开发常见问题及解决方案 本文主要介绍ARKit开发过程中一些常见问题 1.ARKit框架无法导入问题 2.ARKit运行黑屏或者白屏问题:Un ...

  7. 学习笔记之C++入门到精通(名师教学·手把手教会)【职坐标】_腾讯课堂

    C++入门到精通(名师教学·手把手教会)[职坐标]_腾讯课堂 https://ke.qq.com/course/101465#term_id=100105503 https://github.com/ ...

  8. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  9. 转载: beta分布介绍

    最近在看机器学习方面的资料,作为入门的李航教授所写的<统计机器学习>一书,刚看完第一章我也是基本处于懵了的状态,其中有一道题提到贝叶斯估计,看了下网上的资料都提到了一个叫做 beta分布的 ...

随机推荐

  1. MySQL常用技能篇

    写在之前的话: 之前一直在用MSSERVER,刚用MySQL时有很多的不适应.就此小结一下工作中遇到的问题和场景(用的不是很深入,供初学者参考),文中出现的局限性欢迎指出 MySQL有客户端式(SQL ...

  2. [NOIP2011提高组]Mayan游戏

    题目:洛谷P1312.Vijos P1738.codevs1136. 题目大意:在一个7行5列的棋盘(左下角坐标0,0)上,有一些不同颜色的棋子. 规定某一时刻,连续三个横排或竖列的棋子颜色相同,则它 ...

  3. pandas 2 选择数据

    from __future__ import print_function import pandas as pd import numpy as np np.random.seed(1) dates ...

  4. The Zen of Python, by Tim Peters

    Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Comp ...

  5. [terry笔记]11gR2_DataGuard搭建_primary零停机

    11gR2搭建dataguard环境,此篇文章是利用rman搭建dataguard,这样的好处是primary不用停机,当然,前提条件是primary已经开启归档. 相对于可以停机,零停机传送数据文件 ...

  6. Python学习第二天-编写三级菜单

    编写三级菜单:1. 运行程序输出第一级菜单2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单3. 菜单数据保存在文件中4. 让用户选择是否要退出5. 有返回上一级菜单的功能 # Author: z ...

  7. jstack命令dump线程信息

    jstack命令dump线程信息 D:\Java\jdk1.8.0_05\bin>jstack.exe 6540 > dump17 6540为java 线程pid: 出来的dump17文件 ...

  8. Java读取配置文件的方式

    Java读取配置文件的方式-笔记 1       取当前启动文件夹下的配置文件   一般来讲启动java程序的时候.在启动的文件夹下会有配置文件 classLoader.getResource(&qu ...

  9. UNIX环境高级编程之第4章:文件和文件夹-习题

    4.1 stat函数是尾随符号链接的,所以用stat替换lstat不会显示符号链接的信息 4.2 在一个目录下先再shell中输入umask shell进程再进行创建文件的操作.其权限抖都会被屏蔽 4 ...

  10. What's the difference between Unicode and UTF-8?

    https://stackoverflow.com/questions/3951722/whats-the-difference-between-unicode-and-utf-8 If asked ...