# Python贝叶斯推理和概率规划

{% tabs %}
{% tab title="关键词" %}
Python | 贝叶斯推理 | 概率规划 | 线性回归 | 时间序列 | 自回归综合移动平均线
{% endtab %}

{% tab title="梗概" %}
### 贝叶斯和概率规划

贝叶斯策略在以下情况下特别有用：

* 您对未知模型参数或有关数据生成的明确信息有先验信念 - 即您想要合并的有用信息。
* 运行学习算法后，我们对参数有了更新的信念——即参数的新分布。
* 您想要捕获结果的不确定性（模型的确定性或不确定性），而不仅仅是一个“最佳”结果。

贝叶斯学习应用于数据较少且不确定性量化至关重要的各种行业环境，包括营销、广告、医疗产品开发、药物统计、药物发现和开发、技术招聘和计算机系统 A/B测试和调参。

概率规划是一种编程范式，使用计算机科学工具来执行统计建模 。概率规划语言用于构建可以执行以下任务的系统：

* 自然语言理解
* 计算机视觉
* 机器人
* 机器学习

概率规划语言非常适合原型设计和试验不同的模型类型。它们使表达概率模型变得容易。概率规划应用如：

* 预测股票价格
* 推荐电影
* 诊断计算机
* 解决金融、医药、制造等领域的问题

### 贝叶斯

#### 模型

有两个决定性特征：

* 未知量使用概率分布进行描述。 我们称这些数量为参数
* 贝叶斯定理用于更新以数据为条件的参数值。 我们还可以将这个过程视为概率的重新分配

为了举例，我们假设我们不知道如何计算后验，因此我们将 Metropolis-Hastings 算法实现到 Python 代码中以获得近似答案。 我们将借助 SciPy 统计函数来完成此操作：

```python
def post(θ, Y, α=1, β=1):
    if 0 <= θ <= 1:
        prior = stats.beta(α, β).pdf(θ)
        like  = stats.bernoulli(θ).pmf(Y).prod()
        prob = like * prior
    else:
        prob = -np.inf
    return prob
```

我们还需要数据，因此我们将为此目的生成一些随机的假数据。

```python
Y = stats.bernoulli(0.7).rvs(20)
```

最后我们运行 Metropolis-Hastings 算法的实现：

```python
 n_iters = 1000
 can_sd = 0.05
 α = β =  1
 θ = 0.5
 trace = {"θ":np.zeros(n_iters)}
 p2 = post(θ, Y, α, β)
 
 for iter in range(n_iters):
     θ_can = stats.norm(θ, can_sd).rvs(1)
    p1 = post(θ_can, Y, α, β)
    pa = p1 / p2
​
    if pa > stats.uniform(0, 1).rvs(1):
        θ = θ_can
        p2 = p1
​
    trace["θ"][iter] = θ
```

### 探索性分析

### 概率规划

### 特征样条曲线

### 时间序列

### 贝叶斯加性回归树

### 逼近贝叶斯计算

### 概率规划

### 源代码
{% endtab %}

{% tab title="关联链接" %}
{% embed url="https://viadean.notion.site/Python-5a0d610bb34c4b29bfbf6b172d2b1e51?pvs=4" %}
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
