以 Python 为实例,介绍贝叶斯理论
admin
2023-07-30 22:26:31
0

什么是贝叶斯理论?

贝叶斯理论就是允许我们根据抽样分布(或称似然度)和先验分布推导出后验分布。

什么是抽样分布?

抽样分布指的是在给定参数θ的条件下,X发生的概率。记做p(X|θ).

举例说明,我们记录了1000次抛硬币的数据。如果1表示硬币正面。可以用python这么表示:

输入 [2]:

123 import numpy as npdata_coin_flips = np.random.randint(2, size=1000)np.mean(data_coin_flips)

输出[2]:

0.46800000000000003

抽样分布允许我们指定数据的生成方式。对抛硬币来说,我们可以假设总体数据服从以 为参数的伯努利分布。这个参数 是抛出1的概率(抛硬币得到正面)。返回结果为1的概率p以及结果为0的概率(1-p)。

可以看出这种分布完美的切合抛硬币事件。如果硬币是均匀的情况下,我们知道p值为0.5,因为抛得1(正面)或0(反面)的机会是平均的。在python中我们可以通过下面两条语句创建这样的分布:

输入[3]:

12 bernoulli_flips = np.random.binomial(n=1, p=.5, size=1000)np.mean(bernoulli_flips)

输出[3]:

0.46500000000000002

既然已经定义了我们所认为的数据生成方式,就可以根据给定参数来计算数据的似然概率P(X|θ)。 因为我们已经选定了伯努利分布,只需要一个参数p就可以了。

我们可以使用伯努利分布的概率质量函数(PMF)来计算单次抛硬币的期望概率。PMF根据一个数据值和给定的参数(本例中为p),返回相应的概率。对伯努利分布来说,这个pmf函数非常简单: 如果数据值为1, 那么它的概率返回p, 如果数据值为0, 那么返回概率为(1-p)。 我们可以定义如下函数:

In [4]:

1234567 def bern_pmf(x, p):        if (x == 1):               return p        elif (x == 0):                return 1 p       else:                return \”Value Not in Support of Distribution\”

现在我们使用这个函数,根据输入输参数来获取每个数据点的概率。如果参数p的值为0.5,那么返回值也总是0.5.

In [5]:

12 print(bern_pmf(1, .5))print(bern_pmf(0, .5))

0.5

0.5

这是一种非常简单的 PMF,不过其他分布的 PMF 会复杂得多。所以呢,我们应该了解这个模块 Scipy,它将这些都作为内建函数,直接调用就可以了。像下面这样描述PMF

In [6]:

123 import scipy.stats as stprint(st.bernoulli.pmf(1, .5))print(st.bernoulli.pmf(0, .5))

0.5

0.5

这个模块很给力,但是我们实际上想知道的是这1000个样本数据的总体概率。怎么才能知道呢?这里有个小技巧,假设我们的样本数据是独立同分布的。那么我们就可以简单的认为所有数据的概率就是每个个体的独立概率的乘积:

p(x1,…,xn|β)=p(x1|β)∗…∗p(xn|β)。Python中可以这样实现:

In [7]:

1 np.product(st.bernoulli.pmf(data_coin_flips, .5))

Out[7]:

9.3326361850321888e-302

得出这样的数据能做什么用呢? 说实话,单个数据本身其实并没有什么卵用。我们现在需要做的是给我们的抽样模型生成更多的分布。现在,我们仅仅使用概率0.5来测试我们的模型,如果概率为0.8呢? 或者0.2呢?我们数据的概率又会怎样?想要验证这些情况, 可以定义一个概率的网格。下面我将构造10001之间的数据组成的网格(因为概率值都在01之间),之后呢,我会在这些值的基础上来计算我们抽样数据的概率。

In [8]:

12345678 import matplotlib.pyplot as pltn.org/github/tfolkman/learningwithdata/blob/master/Bayes_Primer.ipynb\”>nbviewer.ipython.org。欢迎加入翻译组。

什么是贝叶斯理论?

贝叶斯理论就是允许我们根据抽样分布(或称似然度)和先验分布推导出后验分布。

什么是抽样分布?

抽样分布指的是在给定参数θ的条件下,X发生的概率。记做p(X|θ).

举例说明,我们记录了1000次抛硬币的数据。如果1表示硬币正面。可以用python这么表示:

输入 [2]:

123 import numpy as npdata_coin_flips = np.random.randint(2, size=1000)np.mean(data_coin_flips)

输出[2]:

0.46800000000000003

抽样分布允许我们指定数据的生成方式。对抛硬币来说,我们可以假设总体数据服从以 为参数的伯努利分布。这个参数 是抛出1的概率(抛硬币得到正面)。返回结果为1的概率p以及结果为0的概率(1-p)。

可以看出这种分布完美的切合抛硬币事件。如果硬币是均匀的情况下,我们知道p值为0.5,因为抛得1(正面)或0(反面)的机会是平均的。在python中我们可以通过下面两条语句创建这样的分布:

输入[3]:

12 bernoulli_flips = np.random.binomial(n=1, p=.5, size=1000)np.mean(bernoulli_flips)

输出[3]:

0.46500000000000002

既然已经定义了我们所认为的数据生成方式,就可以根据给定参数来计算数据的似然概率P(X|θ)。 因为我们已经选定了伯努利分布,只需要一个参数p就可以了。

我们可以使用伯努利分布的概率质量函数(PMF)来计算单次抛硬币的期望概率。PMF根据一个数据值和给定的参数(本例中为p),返回相应的概率。对伯努利分布来说,这个pmf函数非常简单: 如果数据值为1, 那么它的概率返回p, 如果数据值为0, 那么返回概率为(1-p)。 我们可以定义如下函数:

In [4]:

1234567 def bern_pmf(x, p):        if (x == 1):               return p        elif (x == 0):                return 1 p       else:                return \”Value Not in Support of Distribution\”

现在我们使用这个函数,根据输入输参数来获取每个数据点的概率。如果参数p的值为0.5,那么返回值也总是0.5.

In [5]:

12 print(bern_pmf(1, .5))print(bern_pmf(0, .5))

0.5

0.5

这是一种非常简单的 PMF,不过其他分布的 PMF 会复杂得多。所以呢,我们应该了解这个模块 Scipy,它将这些都作为内建函数,直接调用就可以了。像下面这样描述PMF

In [6]:

123 import scipy.stats as stprint(st.bernoulli.pmf(1, .5))print(st.bernoulli.pmf(0, .5))

0.5

0.5

这个模块很给力,但是我们实际上想知道的是这1000个样本数据的总体概率。怎么才能知道呢?这里有个小技巧,假设我们的样本数据是独立同分布的。那么我们就可以简单的认为所有数据的概率就是每个个体的独立概率的乘积:

p(x1,…,xn|β)=p(x1|β)∗…∗p(xn|β)。Python中可以这样实现:

In [7]:

1 np.product(st.bernoulli.pmf(data_coin_flips, .5))

Out[7]:

9.3326361850321888e-302

得出这样的数据能做什么用呢? 说实话,单个数据本身其实并没有什么卵用。我们现在需要做的是给我们的抽样模型生成更多的分布。现在,我们仅仅使用概率0.5来测试我们的模型,如果概率为0.8呢? 或者0.2呢?我们数据的概率又会怎样?想要验证这些情况, 可以定义一个概率的网格。下面我将构造10001之间的数据组成的网格(因为概率值都在01之间),之后呢,我会在这些值的基础上来计算我们抽样数据的概率。

In [8]:

12345678 import matplotlib.pyplot as pltriped-line\” id=\”crayon-5812b10553e6b423456456-2\”>import seaborn as sns%matplotlib inlines

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...