金曜日 2 p.m.–5 p.m.
エンジニアのためのベイズ推定入門:確率論的プログラミングのすすめ
Yuta Kashino
- 対象レベル:
- 中級
- カテゴリ:
- Other
説明
最近のイケてる統計解析や機械学習の大前提知識であるベイズ推定を身につけたいと思っているけれど,有名な教科書を読んでも事前分布,事後分布,マルコフ連鎖,ギブスサンプリングなどの概念に翻弄されている技術者のあなた.このチュートリアルはあなたのような技術者やプログラマがベイズ推定を行うための基礎となる知識を身につけるためのものです.数学的な詳細には立ち入らない代わりにPythonコードを動かしながらべイズ推定の肝を理解し,確率論的プログラミングを体験することを目指します.
概要
#### 口上
今は「ビッグデータ」「IoT」の時代です.時々刻々と生み出されるログデータ,センサデータなどの大規模データを扱うためにベイズ統計解析や機械学習が主流になり,データサイエンスという言葉が生まれました.そのデータサイエンスの大前提となるのがベイズ推定です.そしてそのベイズ推定の確率論的なモデルをプログラムとして実現することが確率論的プログラミングです.
本チュートリアルではこのベイズ推定の重要概念を噛み砕いて説明すると共に,数式展開を最小にしながら実際にPythonコードを動作させ,結果をグラフ等に描画しながら,確率論的プログラミングを体感するアプローチをとります.参加者はハンズアウトで渡されるIPythonノートブックを実行しながら,自分でいろいろな確率論的プログラミングを試すことができます.
今回こういったチュートリアルを企画,開催できるのには理由があります.元々確率論的プログラミングに最も重要なことは,解くべき問題に合致した適切な乱数を設計するということですが,今までの乱数発生機構(主流はギブスサンプラー)は,適切な乱数を手に入れるためにはユーザにかなり入り組んだ統計学的な知識を要求していました.そのため初心者にはベイズ推定はかなり敷居の高いものとなっていました.しかし,2011年にNo-U-Turnサンプリング法(ハミルトニアン・モンテカルロ法の一つ)というほとんど自動的に適切な乱数を生成できるアルゴリズムができたことで,確率論的プログラミングが劇的に簡単になりました.つまり,誰でも複雑な統計学的な知識を前提としなくても確率論的プログラミングを行うことが可能になったのです.Pythonでは2014年にPyMC3, PyStanというライブラリにNo-U-Turnサンプリング法が実装されました.
また現在のPythonのデータサイエンスに対してのツール群の豊富さは,他の言語環境とはまったく比べるべくもないほど充実しているという事実も無視できません.NumPy, SciPy, Pandas, StatsModels, Matplotlib/Seaborn/Bokeh, Theano, IPython などパワフルで信頼できるライブラリやツールがいつでも利用できる状態にあります.つまりこれらのツール群が形成しているエコシステムにより,Pythonでベイズ推定・確率論的プログラミングを行う敷居が下がっているのです.
本チュートリアルではPyMC3, PyStanをベースにした教材で動作するライブラリを用いて体験することで,従来ベイズ推定に必要だった統計学の枝葉末節に入り込むことなく,ダイレクトに問題をPythonでモデリングし解決することを実際に体験してもらいます.過去のPyConだったらNo-U-Turnサンプリング法の安定したPython実装が無かったために本チュートリアルを開催することはなかなか難しかったかもしれません.しかし,ビッグデータ/IoT, データサイエンス,Pythonデータサイエンスツール群, PyMC3/PyStanと,今まさに全ての機会と道具が揃っているときにベイズ推定・確率論的プログラミングを身につけないでいつ身につけるのでしょうか!
本チュートリアルにより,参加者がPythonを使ってベイズ推定を理解することで時代が要求する知識を身につけることができ,ひいては参加者の可能性を広げていくことができれば幸いです.
#### 用意するもの
- pymc3がインストールされたPC
- Python3.4以上を推奨します(講習はPython3.4で行います).
- インストール方法: http://pymc-devs.github.io/pymc3/getting_started/#installation
- 上記のインストールされた環境が用意できない場合: インターネットに繋がるPCをお持ち下さい.Jupyter Hubで実行できるような環境を用意します.
#### 当日の進め方
- まず教材となるJupyterノートブックをダウンロード,または今回の講習で利用するJupyter Hubサーバーにアクセスします.
- 教材,および捕捉資料はプロジェクタで投影します.
- Jupyterノートブックのコードを一つ一つ実行させながら,確率論的プログラミングを理解していきます.
- 質問は随時受け付けますが,時間内に答えることが難しい質問は後に回してまとめて回答します.
#### 対象者
- ベイズ推定の基本身につけたいと思っているエンジニア
- 確率論的プログラミングが気になっている全ての人
- Python / NumPy / SciPy を使ったプログラミングを何度か自分の力で書き上げるのに必要な知識を持った方
- 大学初年度程度の数学の知識があると理解がスムーズになります.
参加者用ハンドアウト
No handouts have been provided yet for this tutorial