Stanによるハミルトニアンモンテカルロ法を用いたサンプリングについて

Similar documents
Probit , Mixed logit

ベイズ統計入門

Microsoft PowerPoint - 資料04 重回帰分析.ppt

Microsoft Word - 補論3.2

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

12/1 ( ) GLM, R MCMC, WinBUGS 12/2 ( ) WinBUGS WinBUGS 12/2 ( ) : 12/3 ( ) :? ( :51 ) 2/ 71

様々なミクロ計量モデル†

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

プログラミング基礎

kubo2015ngt6 p.2 ( ( (MLE 8 y i L(q q log L(q q 0 ˆq log L(q / q = 0 q ˆq = = = * ˆq = 0.46 ( 8 y 0.46 y y y i kubo (ht

医系の統計入門第 2 版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 第 2 版 1 刷発行時のものです.

演習2

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Microsoft PowerPoint - H17-5時限(パターン認識).ppt

PowerPoint プレゼンテーション

ビジネス統計 統計基礎とエクセル分析 正誤表

ii 3.,. 4. F. (), ,,. 8.,. 1. (75%) (25%) =7 20, =7 21 (. ). 1.,, (). 3.,. 1. ().,.,.,.,.,. () (12 )., (), 0. 2., 1., 0,.

NLMIXED プロシジャを用いた生存時間解析 伊藤要二アストラゼネカ株式会社臨床統計 プログラミング グループグルプ Survival analysis using PROC NLMIXED Yohji Itoh Clinical Statistics & Programming Group, A

Microsoft PowerPoint - 14回パラメータ推定配布用.pptx

プログラミング実習I

パーキンソン病治療ガイドライン2002

研修コーナー

チュートリアル:ノンパラメトリックベイズ

cp-7. 配列


FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

本文/目次(裏白)

一般演題(ポスター)

3/4/8:9 { } { } β β β α β α β β

0 部分的最小二乗回帰 Partial Least Squares Regression PLS 明治大学理 学部応用化学科 データ化学 学研究室 弘昌

Variational Auto Encoder

日本内科学会雑誌第98巻第3号

meiji_resume_1.PDF

スライド 1

「統 計 数 学 3」

統計学 - 社会統計の基礎 - 正規分布 標準正規分布累積分布関数の逆関数 t 分布正規分布に従うサンプルの平均の信頼区間 担当 : 岸 康人 資料ページ :

分析のステップ Step 1: Y( 目的変数 ) に対する値の順序を確認 Step 2: モデルのあてはめ を実行 適切なモデルの指定 Step 3: オプションを指定し オッズ比とその信頼区間を表示 以下 このステップに沿って JMP の操作をご説明します Step 1: Y( 目的変数 ) の

読めば必ずわかる 分散分析の基礎 第2版

68 A mm 1/10 A. (a) (b) A.: (a) A.3 A.4 1 1

‚åŁÎ“·„´Šš‡ðŠp‡¢‡½‹âfi`fiI…A…‰…S…−…Y…•‡ÌMarkovŸA“½fiI›ð’Í

2301/1     目次・広告

y = x x R = 0. 9, R = σ $ = y x w = x y x x w = x y α ε = + β + x x x y α ε = + β + γ x + x x x x' = / x y' = y/ x y' =

PowerPoint プレゼンテーション

日本内科学会雑誌第102巻第4号

日本製薬工業協会シンポジウム 生存時間解析の評価指標に関する最近の展開ー RMST (restricted mean survival time) を理解するー 2. RMST の定義と統計的推測 2018 年 6 月 13 日医薬品評価委員会データサイエンス部会タスクフォース 4 生存時間解析チー

JavaプログラミングⅠ

メソッドのまとめ

gengo1-11

10:30 12:00 P.G. vs vs vs 2

第9回 配列(array)型の変数

tnbp59-20_Web:P1/ky108679509610002943

第101回 日本美容外科学会誌/nbgkp‐01(大扉)

27巻3号/FUJSYU03‐107(プログラム)

パーキンソン病治療ガイドライン2002

2011年10月 179号 新レイアウト/001     4C

講義のーと : データ解析のための統計モデリング. 第2回

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 時系列解析(11)_講義用.pptx

PowerPoint プレゼンテーション

Part () () Γ Part ,

みっちりGLM

Microsoft PowerPoint - program.ppt [互換モード]

LLG-R8.Nisus.pdf

Java講座

memo

診療ガイドライン外来編2014(A4)/FUJGG2014‐01(大扉)

Transcription:

Stan によるハミルトニアンモンテカルロ法を用いたサンプリングについて 10 月 22 日中村文士 1

目次 1.STANについて 2.RでSTANをするためのインストール 3.STANのコード記述方法 4.STANによるサンプリングの例 2

1.STAN について ハミルトニアンモンテカルロ法に基づいた事後分布からのサンプリングなどができる STAN の HP: mc-stan.org 3

由来 Stanislaw Ulam( モンテカルロ法の考案した人 ) の頭文字から 使い方 Stan のプログラミング言語でデータやモデルを記述することでサンプリング 特徴 Stan のコードを C++ に変換して C++ 上でコンパイル 実行をしている 自動で微分が行われる ( ハミルトニアンモンテカルロ法で微分が必要 ) いくつかのプログラミング言語から Stan のコードを呼びせる オープンソースソフト (GitHub) 4

事後分布からサンプリングしてやりたいことの例 学習データ x n = x 1,, x n 学習モデル p x w パラメータの事前分布 φ(w) n パラメータの事後分布 p w x n i=1 p x i w φ(w) w j ~p(w x n ) 予測分布 p x x n = p x w p w x n dw 1 L j=1 L p x w j クロスバリデーション n CV = 1 n i=1 1 log E w p(x i w) 1 n log n i=1 L 1 1 L p x j=1 i w j 予測損失 G = q x log E w p x w M 1 M m=1 q(x m ) log L 1 L j=1 p x w j など 5

Stan のコードが使えるプログラミング言語 1. コマンドライン (CmdStan) 2.R(RStan) 3.Python(PyStan) 4.Matlab(MatlabStan) 5.Julia(Stan.jl) 6.Stata(StataStan) 6

2.RStan のインストール 1.R をインストール CRAN(https://cran.r-project.org) やそのミラーサイト (http://cran.ism.ac.jp など ) から対応する OS のインストーラをダウンロードする 7

2.RTools をインストール https://cran.r-project.org/bin/windows/rtools/ から最新バージョンをダウンロード インストーラ ( 丸の部分にチェックを入れる必要がある ) 8

3.Stan のパッケージをインストール R を起動して install.package( rstan, dependencies=true) と入力して R を再起動 9

3.STAN のコード記述方法 Stan のコードは 7 つのブロックからなる 1.functions{: 他のブロックで用いるユーザ定義の関数を記述する ) 2.data{: モデルに必要なデータやハイパーパラメータの型を宣言する 3.transformed data{: データの中で宣言以外の処理をしたいものの宣言と処理を行う 10

4.parameters{: サンプリングするパラメータの構造を宣言する 5.transformed parameters{: パラメータの中で宣言以外の処理をするものの宣言と処理を行う 6.model{: サンプリングしたい分布に対数を取ったものを記述する 7.generated quantities{: 各サンプリングで得られたパラメータ毎に計算することができるブロック 1 model ブロック以外は省略可 2 順番は 1~7 の順番で書く必要がある 11

データの型 int: 整数型 real: 実数型 real<lower=0,upper=1>: 最小値 0 最大値 1の実数 ( 他の型でも制約はつけることができる ) real a[n] : 変数 aに実数の要素数がnの配列を宣言 vector[n]:n 次元ベクトル ( 要素は実数 ) simplex[n]:n 次元ベクトルで総和が1 matrix[n,m]:n 行 M 列の行列 ( 要素は実数 ) cov_matrix[m]:m 行 M 列の分散共分散行列 など 12

4.STAN によるサンプリングの例 1. ベルヌーイ分布 STAN のコード p x p = p x 1 p 1 x, φ p p α 1 1 p β 1 data{ int<lower=0> n; int<lower=0, upper=1> x[n]; parameters{ real<lower=0, upper=1> theta; model{ increment_log_prob(beta_log(theta, 1,1)); for(i in 1:n) increment_log_prob(bernoulli_log(x[i], theta)); データとかハイパーパラメータとかの型宣言をするブロック サンプリングするパラメータの型宣言をするブロック log φ(w) + log p(x n w) を定義するブロック 13

R のコード library(rstan) rstan_options(auto_write=true) options(mc.cores = parallel::detectcores()) n <- 100 true_theta <- 0.2 x <- numeric(n) for(i in 1:n){ if(runif(1) < true_theta ) x[i] <- 1 else x[i] <- 0 learning_data <- list(n = n, x = x) fit <- stan(file = "bernoulli.stan", data = learning_data, iter = 2000, chains = 4) print(fit) traceplot(fit, warmup=t) post_theta <- extract(fit, permuted=t) plot(post_theta$theta, rep(0, length(post_theta$theta))) R で stan を実行するための関数 file:stan コードのファイル名 data:stan 上に渡すデータ iter: 合計繰り返し回数 ( デフォルトは iter/2 がバーンイン ) chains: 初期値を変える回数 14

実行結果の例 mean: サンプリングの平均 se_mean: 標準誤差 sd: 標準偏差 2.5~97.5: 分位点 n_eff: 有効サンプルサイズ Rhat:Gelman,Rubin の収束判定指標 lp : 対数事後分布の値 15

2. 正規分布 p x w = 1 2πσ 2 exp x μ 2 2σ 2, φ μ α exp μ 2 2 100 2, φ σ2 β 1, β 2 σ 2 (β 1+1) exp β 2 1 σ 2 data{ int<lower=1> n; vector[n] x; transformed data{ real<lower=0> alpha; //hyperparameter of center real<lower=0> beta1; //hyperparameter of variance real<lower=0> beta2; //hyperparameter of variance alpha <- 100; beta1 <- 5; beta2 <- 5; parameters{ real mu; //parameter of center real<lower=0> vari; //parameter of variance model{ mu ~ normal(0,alpha); vari ~ inv_gamma(beta1, beta2); x ~ normal(mu, sqrt(vari)); generated quantities{ real sigma; //stardard deviation sigma <- sqrt(vari); サンプリングステートメント (increment_log_prob(normal_log( )) と同じ ) ハイパーパラメータを最初から決めているため transformed dataブロックに記述 16

3. 線形回帰 data{ int<lower=0> n; //number of samples int<lower=0> N; //dimension of x int<lower=0> M; //dimension of y matrix[n,n] x; matrix[n,m] y; real lambda; //hyperparameter of A parameters{ matrix[n,m] A; transformed parameters{ real<lower=0> squared_error; squared_error <- 0; p y x, w = 1 2π M exp y Ax 2 2, φ A λ i,j exp λ A ij for(i in 1:n){ squared_error <- squared_error + dot_self(y[i]-x[i]*a); model{ for(i in 1:N){ for(j in 1:M){ increment_log_prob(-lambda*fabs(a[i][j]));// for lasso // increment_log_prob(-lambda*pow(a[i][j],2)); //for ridge increment_log_prob(-squared_error); 17

4. 混合正規分布 ( 一番簡単なやつ ) p x w = 1 a N x + an(x b), φ(w) a φ 1 1 a φ 1 exp functions{ real gmm_log(real x, vector ratio, vector mu){ vector[rows(ratio)] sum_term; int K; K <- rows(ratio); for(k in 1:K){ sum_term[k] <- log(ratio[k]) + normal_log(x, mu[k],1); return log_sum_exp(sum_term); real gmm_vector_log(vector x, vector ratio, vector mu){ vector[rows(ratio)] sum_term; real log_model; int K; int n; K <- rows(ratio); n <- rows(x); log_model <- 0; for(i in 1:n){ for(k in 1:K){ sum_term[k] <- log(ratio[k]) + normal_log(x[i], mu[k],1); log_model <- log_model + log_sum_exp(sum_term); return log_model; data{ int<lower=0> n; //number of samples vector[n] x; real<lower=0> phi; //hyperparameter for mixing ratio transformed data{ real<lower=0> beta; //hyperparameter for centers(unmodeled) beta <- 100; parameters{ simplex[2] ratio; //mixing ratio real mu; //center of component model{ vector[2] mu_dash; mu_dash[1] <- 0; mu_dash[2] <- mu; //priors ratio ~ beta(phi,phi); mu ~ normal(0,beta); for(i in 1:n){ x[i] ~ gmm(ratio, mu_dash); //increment_log_prob(gmm_log(x[i],...)) と同じ 1 2 100 2 b2 18

5. 結論 1.STAN のインストール方法を紹介した 2.STAN を用いた事後分布からのサンプリングについていくつかの分布を用いて紹介した 是非 STAN を使ってみてください 19

補足 20

ハミルトニアンモンテカルロ法について 1.w (0) の初期値を決めて t = 0 とする 確率分布 p w x n exp H w からサンプリング 2. 補助変数を p~n(0,1) で発生させる 3.w 0 = w t, p 0 = p,ε を決めて次の漸化式を w = w (L) になるまで繰り返す p τ + 1 2 = p τ ε 2 w H w τ, w τ + 1 = w τ + εp τ + 1 2, p τ + 1 = p τ + 1 2 ε H w τ + 1 2 w 4.min 1, exp H w L, p L H w t, p (t) の確率で w (t+1) = w (L), そうでなければ w (t+1) = w (t) 5.t = t + 1 として t が欲しいサンプルの個数でなければ 2 に戻る H w, p = H w + p2 2 Lとεをいい感じに決めてくれるものとしてNo-U-Turn Sampler(NUTS) があり STANのデフォルトアルゴリズムは 21NUTSである

Stan の参考文献 岩波データサイエンス Vol.1 ( 特集 ) ベイズ推論と MCMC のフリーソフト ( 買ってないが 目次に Stan を紹介したところがある ) [ 特集 ] ベイズ推論と MCMC のフリーソフトのサポートページ ( インストールの仕方が載ってる ) (https://sites.google.com/site/iwanamidatascience/vol1/support_tokushu) 基礎からのベイズ統計学 : ハミルトニアンモンテカルロ法による実践的入門 ( 付録に Rstan の例が載っている ) Bayesian Data Analysis ( 付録に Rstan の例が載っている 開発者の方が書かれた本なので上のものより詳しい ) 22