ベイズ線形回帰(Linear regression)モデル|PyMC3チュートリアルに学ぶ統計モデリング #2

f:id:lib-arts:20200902205650p:plain

当シリーズではPyMC3のチュートリアルを元に統計モデリングについて確認しています。PyMC3はベイズ統計モデリングのためのPythonのパッケージで、Pythonにおいてベイズ統計を取り扱うにあたってはデファクトとみて良いパッケージだと思います。
#1では導入としてPyMC3の概要の確認とインストールに加え、簡単な動作確認を行いました。

#2では下記を参考にベイズ線形回帰(Linear regression)モデルについて確認していきます。

GLM: Linear regression — PyMC3 3.9.3 documentation

以下、目次になります。
1. PyMC3のドキュメントの概要
2. 理論的な内容の確認
3. 実行&実装の確認
4. まとめ


1. PyMC3のドキュメントの概要
1節では#1に引き続き、参照しているPyMC3のドキュメントの概要について簡単に確認します。

f:id:lib-arts:20200828171717p:plain

PyMC3 Documentation — PyMC3 3.9.3 documentation

上記がPyMC3のドキュメントですが、ページ上部にタブとして"Tutorials"や"Examples"が設置されています。ぱっと見た感じ、"Examples"の方が読み進めやすそうだったのでしばらくは"Examples"を読み進めていくことにします。

f:id:lib-arts:20200902212100p:plain

examples_notebooks — PyMC3 3.9.3 documentation

"Examples"のページでは上記のように、様々なモデリングのサンプルが並んでいます。基本的なモデリングからやや発展的なモデリングまでがありますが、#2ではとにかく簡単な例をということで"GLM: Linear regression"を確認することにします。

GLM: Linear regression — PyMC3 3.9.3 documentation

f:id:lib-arts:20200902212135p:plain

以下、2節と3節では上記の確認を行なっていきます。


2. 理論的な内容の確認

GLM: Linear regression — PyMC3 3.9.3 documentation

2節では上記の内容の理論的な内容をざっと確認できればと思います。

f:id:lib-arts:20200902212402p:plain

まず上記のように、立式を行なっています。これは通常の線形回帰のモデリングで、y=ax+bとほぼ同様ですが、\mathbf{X}\mathbf{\beta}のように行列を用いた表記のため、単回帰分析と重回帰分析の双方を含んだ式になっていることは理解しておくと良いと思います。基本的には最小二乗法(OLS; Ordinary Least Square)や最尤推定(MLE; Maximum Likelihood Estimation)に基づいて、\mathbf{\beta}の値の計算(fitting)を行います。実際は最小二乗法も最尤推定から導出できるので、並列での記載はおかしいのですが本題ではないので、最尤推定から最小二乗法を導出できることだけ抑えておいていただけたらと思います。

f:id:lib-arts:20200902213541p:plain

上記のように目的変数に正規分布を仮定し(ここでは省略しますが、最尤法から最小二乗法が導出できます)、予測値を中心とした正規分布として確率的な表現をし、最尤法を用いるのがモデリングの基本的な流れです。

f:id:lib-arts:20200902214029p:plain

また、上記はこの線形回帰のモデルにベイズ的な考え方を導入する意義について記述されています。記載の通り、ベイズ的な考え方を用いることで、パラメータに事前知識を反映させることができます。これによってサンプルが少ない時の、サンプルの偏りによるフィッティングの誤りを回避することができます。

基本的には一般的なベイズ線形回帰として記載されているので、その理解で問題ないと思います。大体の理論的な内容については確認できましたので2節はここまでとします。


3. 実行&実装の確認
まずは問題設定について確認します。

f:id:lib-arts:20200902214626p:plain

上記のような状況において回帰を行うというのがここでの問題設定です。y=2x+1にノイズを乗せたサンプルを元にしたフィッティング問題になっています。

f:id:lib-arts:20200902215055p:plain

モデリングの実行方法については二種類記載されており、上記のようなしっかり内容を記載する方法ともう少しシンプルに記載する方法です。上記の記述方法では、"Define priors"のところでパラメータにあたる切片(intercept)と係数(coefficients)に関する事前分布を設定しています。また、"Difine likelihood"では目的変数のyの分布として正規分布を設定し、尤度を定義しています。このように記載した上で、NUTS(No-U-Turn Sampler)を用いたMCMC法に基づいてパラメータ推定を行なっています。

f:id:lib-arts:20200902215556p:plain

上記が二つ目の記載方法です。こちらの方がモデリングにさほど詳しくなくても記載できるため、直感的な記載方法であるが、行うモデリング自体は最初の例と同じであるとされています。

f:id:lib-arts:20200902215900p:plain
上記がMCMC法の実行結果です。PyMC3を用いると、このような形で実際に具体的な処理を明記せずにモデリングにおけるパラメータ推定を行うことができます。


4. まとめ
#2では"GLM: Linear regression"を元に、ベイズ線形回帰について確認しました。
#3では"GLM: Logistic Regression"を元にロジスティック回帰について確認します。

examples_notebooks — PyMC3 3.9.3 documentation