python实现贝叶斯概率
时间: 2023-06-29 11:05:57 浏览: 189
在 Python 中,可以使用 `scipy` 库中的 `stats` 模块来实现贝叶斯概率。下面是一个例子:
假设有一个硬币,我们不知道它是正面朝上的概率是多少,现在我们对这个硬币进行了 10 次投掷,其中有 6 次是正面朝上的。现在我们想要求出这个硬币正面朝上的概率。
首先,我们需要定义先验分布和似然函数:
```python
import scipy.stats as stats
# 先验分布:假设硬币正面朝上的概率服从 Beta 分布,参数为 a=2, b=2
prior = stats.beta(2, 2)
# 似然函数:假设硬币投掷 10 次,其中有 6 次是正面朝上的,则似然函数为二项分布
likelihood = stats.binom(n=10, p=None)
```
然后,我们需要使用贝叶斯公式计算后验分布。根据公式,后验分布等于先验分布乘以似然函数,再进行归一化:
```python
# 计算后验分布:后验分布 = 先验分布 x 似然函数
posterior = prior * likelihood.pmf(6)
# 进行归一化
posterior /= posterior.sum()
```
最后,我们可以使用 `posterior` 数组中的值来表示硬币正面朝上的概率:
```python
print("硬币正面朝上的概率为:{:.2f}%".format(posterior.mean() * 100))
```
输出结果为:硬币正面朝上的概率为:55.56%。
完整代码如下:
```python
import scipy.stats as stats
# 先验分布:假设硬币正面朝上的概率服从 Beta 分布,参数为 a=2, b=2
prior = stats.beta(2, 2)
# 似然函数:假设硬币投掷 10 次,其中有 6 次是正面朝上的,则似然函数为二项分布
likelihood = stats.binom(n=10, p=None)
# 计算后验分布:后验分布 = 先验分布 x 似然函数
posterior = prior * likelihood.pmf(6)
# 进行归一化
posterior /= posterior.sum()
print("硬币正面朝上的概率为:{:.2f}%".format(posterior.mean() * 100))
```
阅读全文