記事の目的
正規分布と、平均が未知の時の共役事前分布である正規分布を使用し、Rを使ってベイズ推定を行います。
20代男性の身長の平均を事後分布で推定します。
参考:ベイズ推論による機械学習入門
目次
1. モデルの説明
2. 推定する分布
3. 事前分布
4. 事後分布
5. 予測分布
#2. 推定する分布
20代男性の身長は、平均が170で標準偏差が10の正規分布に従います(適当)。しかし、僕たちはそれを知りません。
この、真の分布の平均の170を事後分布で推定します。
curve(dnorm(x, 170, 10), 100, 250, xlab="20代男性の身長", ylab="確率密度")
#3. 事前分布
事前分布として、正規分布の、平均が未知のときの共役事前分布である正規分布を指定します。
平均が0で分散が10000の正規分布を仮定して、データに適合しやすくしています。
m0 <- 100
lambda.mu0 <- 1/50^2
curve(dnorm(x, m0, 1/sqrt(lambda.mu0)), 0, 250,
xlab="20代男性の平均身長", ylab="確率密度", ylim=c(0,0.3))
#4. 事後分布
真の分布から50個のサンプルを取って事後分布を推定します。
事後分布は緑の曲線です。170付近が一番出やすいと推定できています。
#データ
N <- 50
X <- rnorm(N, 170, 10)
#事後分布
lambda0 <- 1/(10)^2
lambda <- N*lambda0 + lambda.mu0
m <- (lambda0*sum(X) + lambda.mu0*m0)/lambda
curve(dnorm(x, m, 1/sqrt(lambda)), 100, 250, add=T, col="green")
#5. 予測分布
予測分布が、真の分布をうまく推定できていることが分かります。
curve(dnorm(x, 170, 10), 100, 250, xlab="20代男性の身長", ylab="確率密度")
curve(dnorm(x, m, sqrt(lambda^(-1)+lambda0^(-1))), 100, 250, add=T, col="blue")
◯SNS
・youtube
https://youtube.com/channel/UCFDyXEywtNhdtwqC3GAkYuA
・Twitter
https://twitter.com/Dken_ta