「StanとRでベイズ統計モデリング」読書会#2: 参加メモ(途中)

水曜Stan - 「StanとRでベイズ統計モデリング」読書会#2に参加させていただきました。
spml4dm.connpass.com

勉強会メモ
今回は Chapter5(54〜78ページ)のもくもくでした。Chapter5 は基本的な統計モデルの紹介。
以下、大事だと思ったことのメモ。

重回帰:

  • 各推定対象パラメータの大きさが同程度(1程度)になるようにデータをスケーリングしておくといいかも。
  • MCMC に使用したデータの範囲外になる未知データに同じ事後モデルをそのまま適用するべきではない(使用データ範囲外では MCMC の結果が信用できるか全然わからないし、そのまま適用したら「出席率」がマイナスみたいな変なことになったりもするかも)。
  • モデルのあてはまりのよさを絵で確認するには、「観測値—予測値」プロットが y=x の周囲にあるか、MAP残差が想定した分散の正規分布にしたがっているかをみるとよい。

二項ロジスティック回帰:

  • 0〜1 をはみ出しちゃうっていうか出力が 0〜1 になるようにする。
  • (途中)

ロジスティック回帰:

  • (途中)

ポアソン回帰:

  • ポアソン分布は一時間に観測される流れ星の数みたいなやつ。
  • (途中)


「StanとRでベイズ統計モデリング」読書会: 参加メモ

水曜Stan - 「StanとRでベイズ統計モデリング」読書会に参加させていただきました。
spml4dm.connpass.com

勉強会メモ
Chapter1〜3 までの予習は前提で、勉強会では Chapter4 を各自もくもくという流れでした。
読んだページ: 28〜49ページ

  • 本には Windows へのインストール方法が書いてあるが、Mac へのインストールは以下の方の記事の通り。st-hakky.hatenablog.com
  • この本で示されているスクリプトは全て GitHub にある。
  • Stan のサンプリングアルゴリズムは NUTS(No-U-Turn Sampler)=ハミルトニアンモンテカルロ法の一種。
  • RStan によるパラメータ推定の手順(単回帰):
    • *.stan ファイルにモデルを記述する。
    • *.R ファイルでデータを読み込み、RStan に渡せる形式のリストに整え、モデルファイルとデータのリストを与えて stan() を実行する。
      • ステップ数の設定やデータを変更して何度も再実行する場合はモデルファイルでなくコンパイル済モデルのオブジェクトを渡すと速い。
  • chain: 「初期値と乱数の種をそれぞれ一つに定めて得られたサンプル列(13ページ)」。RStan のデフォルト設定では 4 chain のサンプル列生成が走る。各 chain を並列実行もできる。
  • thining(シンニング): MCMC においてサンプルを間引くこと。例えばサンプル列を1つおきに採用するなど。間引きによって収束が改善することがある。Stan のサンプリングではサンプル列の自己相関が低いので普通は間引かなくてよい。
  • 対数事後確率もパラメータ同様収束しなければならない。
  • 収束診断の作図には ggmcmc パッケージが便利。



2017-03-22 追記
読んだページ: 49〜53ページ

  • モデルにあらわれる変数を定義したり、MCMC 時に得られたサンプル列を利用してついでに計算しておきたい変数を定義したりできる。
    • transformed parameters ブロック: y := a * x + b のようにパラメータから新たな変数を定義できる。この y をモデル式につかえる。
    • generated quantities ブロック: y_new := a * x_new + b のように新たな変数を定義できる。例えばテキストのような年齢で年収を説明する例なら、未知の年齢の列を x_new にしておいて、未知の年齢群の年収の確率分布を得ることが考えられる。
      • 未知の x ではなく元データの x 列を x_new として、予測値(予測分布)の箱ひげ図(箱ひげ図じゃなくてもいいと思うけど)の上に実測値をプロットするような用途にもつかう(Chapter5)。「予測分布の上に実測値」式プロットはいつでも描けるので便利(説明変数が3つ以上のときは3次元プロットでも説明変数空間にはプロットできないから)。→ でも、62ページの図5.3をみるとごちゃついている気がするなあ…。
      • 2017-03-29 追記 モデル式を信頼区間の幅を持たせて書きたいとき便利(データのX列は 5, 10, 15 だったとき、信頼区間の幅をもったモデル式の図を得るには 5 と 10 の間の補間が必要)。

個人的宿題

その他

  • 48ページっぽい周辺分布の作図には ggExtra パッケージが便利らしい。

雑記

今日勉強会で、論文を読むのに、内容を1枚のスライドにまとめて数を何十本もこなすという話を聞きました。
同じ話が以下の記事に取り上げられています。論文1本にかける時間を切っておくのもコツみたいです。

lafrenze.hatenablog.com
自分は読みたいと思った論文は Dropbox に格納して永久に放置しているので、これをやってみたいです。
早速形から入ってみます(以下)。スーパー斜め読みなので内容は合っているかよくわからないです。
出典: https://openreview.net/forum?id=r1Ue8Hcxg

Neural Architecture Search with Reinforcement Learning
Barret Zoph, Quoc V. Le
どんなもの?
最終的に得るニューラルネット ( child network とよぶ ) の構造自体を RNN ( controller とよぶ ) を強化学習して決めさせる。
先行研究と比べてどこがすごい?
ニューラルネットの構造を探索する先行研究はない?
技術や手法のキモはどこ?
「よいニューラルネット構造を得る」を強化学習タスクとして定式化したところ。
child network の構造を可変長の文字列で表現することで controller RNN で生成できるようにしたところ。
どうやって有効だと検証した?
CIFAR10 などで人が設計したニューラルネットと比較。
議論はある?
この欄に書くことがよくわからないんだけど、この論文であればこういうケースは得意とかこういうケースは苦手とかいうのがくるのかもしれないけど、それもよくわからない。
次に読むべき論文は?
これの後発の論文だと思うけどまだ調べていない。
書いてみて思ったんだけど時間を切らないと精読しようとして進まないから時間を切るのはいいと思う。ただ上のフォーマットはしっくりこない。何かをつかんだ気がしない。なら自分用のフォーマットをつくるべきなんだけど、でも論文によってストーリーの抜き出し方は違うと思うんだけど、そうやってオーダーメイドしようとすると数がこなせないのか。難しい。

雑記: Python statsmodels をつかってみるだけ

以下の記事を全面的に参考にさせていただきました。
data.gunosy.io
上の記事では電力使用量のトレンドを抽出していますが、ここでは(電力使用量とかなり似通っていますが)R の組み込みデータである UKgas(1960年から1986年までの四半期ごとのイギリスのガス消費量)をつかいます。
Python から読み込む都合上、UKgas は以下のように csv に出力しておきます。

qtr, gas
1960-03, 160.1
1960-06, 129.7
1960-09, 84.8
1960-12, 120.1
1961-03, 160.1
(以下略)
UKgas をそのままプロットすると以下です。
  f:id:cookie-box:20170303235217p:plain:w600

トレンド成分、季節成分、残差に分解したのが以下です。
f:id:cookie-box:20170303235232p:plain:w560

季節成分は以下です。毎年1~3月がガスの消費量が大きい。

[ 175.13810096  -36.14122596 -168.96766827   29.97079327]

スクリプト

# -*- coding: utf-8 -*-
import numpy
import pandas
import matplotlib.pyplot as plt
import statsmodels.api as sm

if __name__ == "__main__":
  x = pandas.read_csv('UKgas.csv', skiprows=1, names=('qtr', 'gas'))
  x['qtr'] = pandas.to_datetime(x['qtr'])

  # plt.plot(x['qtr'], x['gas'])
  # plt.show()

  res = sm.tsa.seasonal_decompose(x['gas'].values, freq=4)
  res.plot()
  plt.show()

  print res.seasonal[0:4]

確率論セミナー(2/2, 2/23): 不参加メモ

Skype数学勉強会 確率論セミナー に参加できなかったメモ
読んでいる本(現在はサブテキスト): はじめての確率論 測度から確率へ : 佐藤 坦 : 本 : Amazon
前回: 確率論セミナー(51): 不参加メモ - クッキーの日記

参加できなかった回に進んだページ: 60~65ページ
以下雰囲気で書いたメモ

  • ルベーグ積分のつよいところ
    • いろんな関数が積分できる
    • lim と積分が多くの場合で交換する(リーマン積分はあまり交換しない)
  • じゃあどんな場合に lim と積分が交換するのか → 以下の3ステップで考える
    • まずは限定的な条件で lim と積分が交換することを示す―単調収束定理
      • 非負可測関数列がほとんどいたるところ単調増大していてかつ lim が有限でかつその積分値も有限なときは lim と積分が交換する
    • 一般の非負可測関数列で lim と積分を交換したときの不等式の関係をおさえる―ファトゥの補題
      •  E[\lim \inf _{n \to \infty} X_n ] \leq \lim \inf _{n \to \infty} E[ X_n ]\{X_n\} は非負可測関数列)
    • 特定の条件下で lim と積分が交換することを示す―ルベーグ収束定理(優収束定理)
      • 概収束する可測関数列 \{X_n\} の絶対値の sup がほとんどいたるところにおいて積分可能な非負可測関数でおさえられるとき lim と積分が交換する

確率論ではとにかく期待値をとりたい(積分をしたい)
どんな場合に期待値がとれるか知りたいので lim と積分がどんな場合に交換するかは重要