Beta分布从入门到精通
近期一直有点小忙,可是不知道在瞎忙什么,最终有时间把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分布从入门到精通的更多相关文章
- 8、ASP.NET MVC入门到精通——View(视图)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...
- Android Studio教程从入门到精通
最新2.0系列文章参考: Android Studio2.0 教程从入门到精通Windows版 - 安装篇Android Studio2.0 教程从入门到精通Windows版 - 入门篇Android ...
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述 PV操作是对信号量进行的操作. 进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...
- 【转载】google搜索从入门到精通
原文地址:http://www.cnblogs.com/helloIT/articles/5095668.html /***************************************** ...
- 《java从入门到精通》学习记录
目录 <Java从入门到精通>学习记录 3 基础的基础部分: 3 一. 常量与变量 3 1. 掌握: 3 (1) .常量与变量的声明方式: 3 (2) .变量的命名规则: 3 (3) .变 ...
- ARKit从入门到精通(11)-ARKit开发常见问题及解决方案
转载请注明出处:ARKit从入门到精通(11)-ARKit开发常见问题及解决方案 本文主要介绍ARKit开发过程中一些常见问题 1.ARKit框架无法导入问题 2.ARKit运行黑屏或者白屏问题:Un ...
- 学习笔记之C++入门到精通(名师教学·手把手教会)【职坐标】_腾讯课堂
C++入门到精通(名师教学·手把手教会)[职坐标]_腾讯课堂 https://ke.qq.com/course/101465#term_id=100105503 https://github.com/ ...
- [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...
- 转载: beta分布介绍
最近在看机器学习方面的资料,作为入门的李航教授所写的<统计机器学习>一书,刚看完第一章我也是基本处于懵了的状态,其中有一道题提到贝叶斯估计,看了下网上的资料都提到了一个叫做 beta分布的 ...
随机推荐
- oracle查询优化之子查询条件优化
环境:oracle 11g 现有a表与b表通过a01字段关联,要查询出a表的数据在b表没有数据的数据:sql如下 ) ) 因为flag是虚拟字段没有走不了索引导致这条sql执行起来特别慢 310W条数 ...
- axios的坑
1.axios默认发送application/json 格式 https://www.cnblogs.com/qdcnbj/p/8143155.html 资料: https://www.npmjs.c ...
- linux 删除命令注意事项(大神勿看)
在做软连接的时候,想到一个问题,如果删除软连接,会不会删除源文件. 如果删除是真删除的话,一旦操作错误那就后悔去吧. 效果是这样的:#rm -rf pp/ 如果pp是软连文件夹,那么 ...
- web移动端-弹性盒模型
(父元素加) : /*新版弹性盒模型*/ /* display: flex; */ /*设置主轴方向为水平方向*/ /* flex-direction: row; */ /*设置主轴方向为垂直方向*/ ...
- POJ-3436 ACM Computer Factory 最大流 为何拆点
题目链接:https://cn.vjudge.net/problem/POJ-3436 题意 懒得翻,找了个题意. 流水线上有N台机器装电脑,电脑有P个部件,每台机器有三个参数,产量,输入规格,输出规 ...
- Java将WKT格式的Geomotry转换成GeoJSON
一.Meven添加依赖 <!-- 引入json处理包 --> <dependency> <groupId>com.alibaba</groupId> & ...
- MySQL数据类型及后面小括号的意义
1,数值类型 1.1数值类型的种类 标准 SQL 中的数值类型,包括严格数值类型(INTEGER.SMALLINT.DECIMAL.NUMERIC),以及近似数值数据类型(FLOAT.REAL.DOU ...
- Redhat 6配置本地Yum源
注明:我的方法适用于iso镜像(光盘或光盘镜像:iso9660) 1.挂载(mount) 其它的mount方法可參见此链接 http://www.jb51.net/os/RedHat/1109.htm ...
- mysql-创建和操作表
一.建表 为了用程序创建表,我们可以使用SQL的create table 语句.如下: 每个列之间用逗号隔开,每列的定义以列名开始,后跟列的数据类型. 表的主键可以在创建表时用primary key关 ...
- 【翻译自mos文章】开启dblink的 oracle net trace/tracing --对dblink进行跟踪的方法
开启dblink的 oracle net trace/tracing --对dblink进行跟踪的方法. 參考原文: DBLINK: How to Enable Oracle Net Tracing ...