⚙️
ウェブ最適化ではじめる機械学習 コード修正内容まとめ(PyMC)
はじめに
地方でデータサイエンティストとして働いているミヤです。
現在、Web最適化で始める機械学習を学習しているのですが、2章を読み進めていく上で、pymc3
のライブラリをインストールする時点で動作しなくなっていたので備忘録として対処法を記しておこうと思います。
本書のサンプルコードはColabノートブックのリンクにまとめられていますので、これにならってColabで実装されて学習を進められている方の助けになれば幸いです。
サンプルコード
修正したサンプルコードのColabリンクです。
pymc
パッケージのインストール
pymc3
は現在pymc
ライブラリに統合されています。よって、pip
でインストールを行う際は後者をインストールする必要があります。今回はpymc==4.1.4
(pymc4)をインストールして進めました。
# インストールしない
!pip install -U arviz==0.9.0 pymc3==3.9.3
↓
# こちらをインストール
!pip install pymc
ライブラリをインストールする際もpymc3
からpymc
へ変更します。
import numpy as np
from matplotlib import pyplot as plt
import pymc as pm # pymc3から変更
plt.style.use('grayscale')
plt.style.use('seaborn-whitegrid')
np.random.seed(0)
メソッド
MCMCサンプリング後のメソッドも一部変更されていますので、主要な変更点をまとめます。
traceplot
がplot_trace
に変更されています。
1. バージョンの移行に伴い# 旧
with model:
pm.traceplot(trace)
↓
# 新
with model:
pm.plot_trace(trace)
trace.posterior['theta'].values
と変更されています。
2. thetaへのアクセスは# 旧
print((trace['theta'] - 0.01 > 0).mean())
↓
#新
print((trace.posterior['theta'] - 0.01 > 0).mean())
trace.posteropr['theta'].values
の次元数が3次元となります。1次元目にchains
の次元が反映されます。
3. 2群の観測値をサンプリングした場合、with pm.Model() as model:
theta = pm.Uniform('theta', lower=0, upper=1, shape=2)
obs = pm.Binomial('obs', p=theta, n=[1280, 1600], observed=[64, 128])
trace = pm.sample(5000, chains=2)
# print((trace['theta'][:, 0] < trace['theta'][:, 1]).mean())
print((trace.posterior['theta'][:, :, 1] - trace.posterior['theta'][:, :, 0] > 0).mean())
pm.plot_trace(trace, ['theta'], compact=True)
その他細かい変更点もありますが、大枠は上記の変更内容に集約されます。
まとめ
今回は、ウェブ最適化ではじめる機械学習の内容についてエラーハンドリングを行った箇所をまとめました。私としてはMCMCはRStanでの実装経験しかないので、もしかすると誤っている箇所があるかもしれません。その際はご一報いただけると幸いです。
Discussion