Tumblrはじめに『ベイズ推論による機械学習入門』の学習時のノートです。「数式の行間を読んでみた」とそれを「RとPythonで組んでみた」によって、「数式」と「プログラム」から理解するのが目標です。省略してある内容等ありますので、本とあわせて読んでください。Distribution)とするモデルに対するベイズ推論を実装します。人工的に生成したデータを用いて、ポアソン分布のパラメータを推定し、また未観測データに対する予測分布を求めます。からっぽのしょこ」を参照してください。利用するパッケージを読み込みます。利用パッケージlibrary(tidyverse)library(gganimate)この記事では、基本的にパッケージ名::関数名()の記法を使うので、パッケージを読み込む必要はありません。作図コードがごちゃごちゃしないようにパッケージ名を省略しているため、ggplot2は読み込む必要があります。magrittrパッケージのパイプ演算子%>%ではなく、ベースパイプ(ネイティブパイプ)演算子|>を使っています。%>%に置き換えても処理できます。学習の推移をアニメーション(gif画像)で確認するのにgganimateパッケージを利用します。不要であれば省略してください。ベイズ推論の実装まずは、モデルを設定して、データを生成します。生成したデータを用いて、事後分布のパラメータを計算します。事後分布のパラメータを用いて、予測分布のパラメータを計算します。\lambda)$を設定します。真の分布(ポアソン分布)のパラメータ$\lambda$を設定します。0$をlambda_truthとして値を指定します。lambda_truthが真のパラメータであり、この値を求めるのがここでの目的です。真の分布を計算して、作図用のデータフレームを作成します。0.000642ポアソン分布の確率変数がとり得る値(非負の整数)$x$を作成して、値ごとに確率を計算します。この例では、0からlambda_truthの3倍を範囲とします。ポアソン分布の確率は、dpois()で計算できます。確率変数の引数xにx_vec、パラメータの引数lambdaにlambda_truthを指定します。真の分布のグラフを作成します。"probability")真の分布(ポアソン分布)のグラフ真のパラメータを求めることは、真の分布を求めることを意味します。x_N\}$を生成します。ポアソン分布に従う$N$個のデータをランダムに生成します。6生成するデータ数$N$を指定します。ポアソン分布に従う乱数は、rpois()で生成できます。データ数の引数nにN、パラメータの引数lambdaにlambda_truthを指定します。生成したN個のデータをx_nとします。観測データ$\mathbf{X}$の度数を集計します。1観測データx_nをデータフレームに格納して、count()で重複をカウントします。観測されなかった値は、データフレームに含まれません。そこで、観測データにない値も含めた集計結果を作成します。12x_vecの値に対応した度数を求めます。x_vecの範囲外の値は含まれません。freq_dfの度数列を、x_vecの値を持つデータフレームにright_join()で結合します。x_nにない値が欠損値NAになるので、replace_na()で0に置換します。この処理は、作図自体には影響しません。サブタイトルに度数を表示するのに必要な処理です。観測データのヒストグラムを真の分布と重ねて確認します。frequency")観測データ(ポアソン分布)のグラフ各値の度数(freq列)をデータ数Nで割って、相対度数をバーの高さとします。データ数が十分に大きいと、ヒストグラムの形状が真の分布に近付きます。次は、尤度に対する共役事前分布を設定します。