統計モデリング PR

Pyroによる一般化線形モデル(GLM)のベイズモデル化【ベイズ統計モデリング入門】

ベイズ統計モデリング
記事内に商品プロモーションを含む場合があります

こんにちは。

現役エンジニアの”はやぶさ”@Cpp_Learningです。最近は統計モデリングを勉強しています。

今回はPyroによる一般化線形モデル(GLM:generalized linear model)のベイズモデル化について勉強したので、備忘録も兼ねて本記事を書きます。

一般化線形モデル(GLM:generalized linear model)とは

一般化線形モデル(GLM)については、簡単にですが以下の記事で紹介済みなので、本記事では割愛します。

sklearnで一般化線形モデル(GLM)
【統計モデリング】scikit-learnが一般化線形モデル(GLM)をサポートしたので使ってみたこんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。 ...

なお今回はリンク関数にシグモイド関数(sigmoid function)を採用した回帰モデルを設計します(下図参照)

シグモイド回帰モデル

一般化線形モデル(GLM)のベイズモデル化

最終的には複数のパラメータをもつGLMをベイズモデル化し、MCMCでパラメータの事後分布を推定するところまで実装します。

事後分布

※今回の例では pm_a, pm_b, pm_c, pm_d の4つのパラメータが登場します

なお「GLMのベイズモデル化」というのは、以下の本の言葉をお借りしました。

はやぶさ
はやぶさ
この本好き過ぎて何度も読み返してます
スポンサーリンク

実践!Pyroで一般化線形モデル(GLM)のベイズモデル化

PyroのMCMCはとても時間がかかるので、GPUの活用をオススメします。なお本記事のソースコードはGoogle Colabで動作確認しています。

Google Colabなら、タダでGPUが使えるし、以下のコマンドのみで環境構築完了です。

pip install pyro-ppl

以降からソースコード書いていきます。

Import

まずはimportから

トイデータ作成

適当なトイデータを作成します。

トイデータ

このデータが今回の対象です。

ベイズ統計モデリング

今回は以下のモデルを設計します。

モデルの概要は以下の通りです。

一般化線形モデル(GLM)

【リンク関数】

f(x) = c * sigmoid(- 1 * (a * x + b)) + d

【確率分布】

μ = f(x), σ = 1.0
Y ~ Normal(μ, σ)

上記パラメータa,b,c,dが正規分布(事前分布)に従って発生すると考え、ベイズモデル化します。

ベイズモデル化

【パラメータ(確率変数 ~ 事前分布)】

μ = 0, σ = 10
pm_a ~ Normal(μ, σ)
pm_b ~ Normal(μ, σ)
pm_c ~ Normal(μ, σ)
pm_d ~ Normal(μ, σ)

【モデル】

f(x) = pm_c * sigmoid(-1 * (pm_a * x + pm_b)) + pm_d

【確率分布(尤度)】

μ = f(x), σ = 1.0
Y ~ Normal(μ, σ)

MCMC実行

以下のコードでMCMCによる推論を実行します。

事後分布の可視化

MCMCで算出された各パラメータは以下のコードで取得できます。

以下のコードで事後分布を可視化します。

事後分布

推論❶

num_samples=500でMCMCを実行したので、各パラメータ(pm_aなど)のサンプルが500個あります。そのうち100個のパラメータを採用し、x=0~1.0 のときの y を予測します。

シグモイド回帰モデル

ベイズ推定では、予測に対する不確実性(uncertainty)を表現できる点が魅力の一つです。

推論❷

Predictiveを使って推論するコードが以下です。

以下のコードで予測結果を可視化します。

シグモイド回帰モデル上図の予測結果を見る限り、良いモデリングができたと感じています。

以上 Pyroによるベイズ統計モデリング実践でした。

まとめ

ベイズ統計モデリングについて勉強し『Pyroによる一般化線形モデル(GLM)のベイズモデル化』にトライした内容をまとめました。

本記事の内容について間違っている箇所やアドバイスなどあれば、教えて頂けると嬉しいです。

まだまだ勉強中ですが、ベイズ統計モデリングの理解が深まり楽しくなってきました!今後も勉強した内容を記事にしたいと思います。

はやぶさ
はやぶさ
統計モデリングに関する情報共有をしながら、一緒に成長できると嬉しいです。よろしくお願いします。

本記事の前半で紹介したオススメの本を改めて紹介します。

統計モデリング入門の良書です

 

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python