はじめに
matplotlibのFuncAnimationにより、ベイズ更新のアニメーションを表示する。
コード
解説
モジュールのインポート
ベータ分布の定義
ベイズの定理を使うときは、ベータ分布を使うと計算しやすい。
ベータ分布は↓のように定義される。
初期設定
グラフの初期設定
self.line, = ax.plot([], [], ‘k-‘)
で空の黒線のプロットを作成する。
self.x = np.linspace(0, 1, 200)
で0〜1の200個の配列を作成。これがx軸のデータとなる。
self.ax.set_xlim(0, 1)
self.ax.set_ylim(0, 15)
self.ax.grid(True)
でx軸範囲、y軸範囲、グリッドの設定。
self.ax.axvline(prob, linestyle=’–‘, color=’black’)
でx=probの位置に垂線をひく。linestyleが–なので、点線となる。
アニメーションの初期設定
self.successを0にして、self.line.set_data([], [])でグラフに空のデータを追加する。
アニメーションの設定
if np.random.rand(1,) < self.prob:
self.success += 1
でrandomなデータがself.prob以下の場合、self.successに+1される。(初期設定でself.success=0)
y = beta_pdf(self.x, self.success + 1, (i – self.success) + 1)
でy軸のデータを生成する。
ランダムな数がprob以下のとき、successが+1されてaが増える。ランダムな数がprob以上のとき、successに変化がないので、bが増える。
self.line.set_data(self.x, y)でself.xと生成したyをプロットする。
アニメーションの表示
ud = UpdateDist(ax, prob=0.7)
でprobを0.7としてclass(UpdateDist)をudとする。
anim = FuncAnimation(fig, ud, frames=np.arange(100), init_func=ud.init, interval=100, blit=True)
でfigに対して、udを100回実行して、intervalを100 msとするので、10 sのアニメーションとなる。init_func=ud.initでアニメーションの初期設定を実行している。
from IPython.display import HTML
HTML(anim.to_html5_video())
とすればjupyter notebook上にアニメーションを表示できる。
コメント