马尔可夫链蒙特卡洛与模型拟合

Python 中的贝叶斯数据分析

Michal Oleszak

Machine Learning Engineer

生产环境中的贝叶斯数据分析

  • 网格近似:参数多时不便
  • 已知后验采样:需共轭先验
  • 马尔可夫链蒙特卡洛(MCMC):从未知后验采样!
Python 中的贝叶斯数据分析

蒙特卡洛

  • 通过生成随机数来近似某个量
  • 由公式,$\pi r^2 \simeq 78.5$

半径为 5 的圆。

Python 中的贝叶斯数据分析

蒙特卡洛

  • 通过生成随机数来近似某个量
  • 由公式,$\pi r^2 \simeq 78.5$
  • 在圆外画一个 10x10 的正方形。

半径为 5 的圆,外接一个正方形。

Python 中的贝叶斯数据分析

蒙特卡洛

  • 通过生成随机数来近似某个量
  • 由公式,$\pi r^2 \simeq 78.5$
  • 在圆外画一个 10x10 的正方形。
  • 在正方形内随机取 25 个点。
  • 有多少落在圆内?$19/25=76\%$
  • 圆面积近似:76% × 100 = 76

半径为 5 的圆,外接一个正方形,内有 25 个随机点。

Python 中的贝叶斯数据分析

马尔可夫链

  • 建模一系列状态,按给定概率在状态间转移。
Python 中的贝叶斯数据分析

马尔可夫链

  • 建模一系列状态,按给定概率在状态间转移。

熊接下来会做什么:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • 经过足够长时间,转移概率与初始状态无关,趋于相同。
Python 中的贝叶斯数据分析

马尔可夫链

  • 建模一系列状态,按给定概率在状态间转移。

熊接下来会做什么:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • 经过足够长时间,转移概率与初始状态无关,趋于相同。

熊在遥远未来会做什么:

hunt eat sleep
hunt 0.28 0.44 0.28
eat 0.28 0.44 0.28
sleep 0.28 0.44 0.28
Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的一个红点。

Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的两个点,一个红色一个黑色。

Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的两个点,一个红色一个绿色。

Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的三个点,一个红色、一个绿色、一个黑色。

Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的两个红点和一个绿点。

Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的四个点,两个红点两个绿点。

Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的七个点,两个红点五个绿点。

Python 中的贝叶斯数据分析

马尔可夫链蒙特卡洛

编号坐标轴上的许多点,部分为红色,多数为绿色。

Python 中的贝叶斯数据分析

广告聚合数据

print(ads_aggregated)
           date  clothes_banners_shown  sneakers_banners_shown  num_clicks
0    2019-01-01                     20                      18           2
1    2019-01-02                     24                      19           8
2    2019-01-03                     20                      20           5
..          ...                    ...                     ...         ...
148  2019-05-29                     24                      25           8
149  2019-05-30                     26                      27          11
150  2019-05-31                     26                      24           8

[151 rows x 4 columns]
Python 中的贝叶斯数据分析

用 pyMC3 做线性回归

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown"


with pm.Model() as model: pm.GLM.from_formula(formula, data=ads_aggregated)
# Print model specification print(model)
# Sample posterior draws trace = pm.sample(draws=1000, tune=500)

pymc3 打印输出,列出模型参数的先验。

Python 中的贝叶斯数据分析

来练习 MCMC!

Python 中的贝叶斯数据分析

Preparing Video For Download...