⚙️

ウェブ最適化ではじめる機械学習 コード修正内容まとめ(PyMC)

2024/07/16に公開

はじめに

地方でデータサイエンティストとして働いているミヤです。
現在、Web最適化で始める機械学習を学習しているのですが、2章を読み進めていく上で、pymc3のライブラリをインストールする時点で動作しなくなっていたので備忘録として対処法を記しておこうと思います。
本書のサンプルコードはColabノートブックのリンクにまとめられていますので、これにならってColabで実装されて学習を進められている方の助けになれば幸いです。

サンプルコード

修正したサンプルコードのColabリンクです。
https://colab.research.google.com/drive/1B--pA78kEnrsCbIQTohWr5varNlHLbtB?usp=sharing

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サンプリング後のメソッドも一部変更されていますので、主要な変更点をまとめます。

1. バージョンの移行に伴いtraceplotplot_traceに変更されています。

# 旧
with model:
  pm.traceplot(trace)

# 新
with model:
  pm.plot_trace(trace)

2. thetaへのアクセスはtrace.posterior['theta'].valuesと変更されています。

# 旧
print((trace['theta'] - 0.01 > 0).mean())

#新
print((trace.posterior['theta'] - 0.01 > 0).mean())

3. 2群の観測値をサンプリングした場合、trace.posteropr['theta'].valuesの次元数が3次元となります。1次元目にchainsの次元が反映されます。

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