SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Pythonとベイズ統計
株式会社ウィズメーティス
渡邉 博文@HW_a_Pythonista
1
Pycon mini Hiroshima 2020
自己紹介(お前、誰よ)
 氏名:渡邉 博文
Twitterアカウント: @HW_a_pythonista
 アカデミアと企業の間にいる人
 専門:生体高分子シミュレーション、医薬品分子設計
4月に起業し、ベイズ統計・機械学習とシミュレーションを組み合わせたツールを開発中
 Python歴は、15年ぐらい(使い始めたときはPython2.3)
 研究者として、Pythonを使って、2つのシミュレーション手法を組み合わせた手法開発など
 Pythonプログラマとして、企業で、ケムインフォマティクスライブラリのサポート
 実は、PyconAPAC2013 in Japan 登壇者
2
Contents
 背景
 ベイズ統計の基本的な考え方と機械学習との関係
 ベイズ統計や確率プログラミングを行うPythonライブラリについての情報
 Pythonによるベイズ統計プログミングの例:PyMC3
 今後の期待
 関連書籍、Webサイトの情報
 まとめ
3
背景
 AIブーム
 ビッグデータ
 ディープラーニング
など、大量データ、複雑なモデルが牽引
⇒画像認識、音声認識などについては、確かにその通り
 MLのAuto-tunerなど、分析支援ツールの向上
⇒Black Box的な使用が可能。
エンジニア、データサイエンティストは、汎化性能、応答時間、前処理さえ気にしていればよい?
4
背景
そもそも、大量のラベル付きデータが集まらない場所も多い。
複雑なモデルは、推定すべきパラメータ数が多く、パラメータが多いと、十分な精度で推定するには、大
量のデータが必要。
ディープニューラルネットワークは複雑で巨大な内挿式を作るようなものであって、その外挿性を期待す
るのは難しい。
(平たく言えば、ある種、データの丸暗記的な側面がある。)
⇒ Black Box的に機械学習を使っていて大丈夫?
5
背景
汎化性能、応答時間、前処理などを気にしていれば十分?
 実応用したときの汎化性能(クロスバリデーションで測りきれている?)
 データの誤差の性質の考慮
 データ数が少ない時への対応
 解釈性
⇒ ベイズ統計・ベイズモデリングが一つの答え
6
ベイズ統計と機械学習
 多くの機械学習法には、ベイズ統計の概
念が使われている。
 例えば、正則化は、ベイズ統計の枠組み
では、事前分布を導入することに相当す
る。
 時には、Black Box的な使用でなく、原理
に戻って、モデリング、チューニングを
行うことが重要になる。
PRML
7
ベイズの定理とベイズ統計
事前分布、事後分布の導入
𝑃 𝐵|𝐴 =
𝑃(𝐴|𝐵)𝑃(𝐵)
𝑃(𝐴)
事後分布:データが得
られた後の確率
事前分布:データが得
られる前の信念を反映
した分布を反
周辺尤度:
確率分布の規格化因子
尤度:データがモデル
にどれだけ当てはまっ
ているかを表すを反
事後分布は、(データが得られる前)の事前
分布と、データのモデルへの当てはまり具合
を表す尤度との積に比例した形で表される。
⇒事前分布の導入により最尤推定に比べて、データ点が少ない時の挙動がよい
8
ベイズの定理の導出
 確率の情報定理
𝑃 𝐴, 𝐵 = 𝑃 𝐴 𝑃 𝐵 𝐴 = 𝑃(𝐵)𝑃(𝐴|𝐵)
𝑃 𝐵|𝐴 =
𝑃(𝐴|𝐵)𝑃(𝐵)
𝑃(𝐴)
AとBが同時に起こる確率は、
= Aが起こる確率 × Aが起こるという条件のものでBが起こる確率
= Bが起こる確率 × Bが起こるという条件のもとでAが起こる確率
ベイズの定理
9
学習(モデルパラメータ推定)の方法
変分法
• 事後分布にある関数形で近似して、
ELBO(周辺尤度下限)を最大化する。
• 一般に計算は高速に行える。
• 近似の入れ方(変分関数の選び方)
によっては、系統誤差が生じる恐れ
がある。
• 一般にはそれぞれのモデル特定のア
ルゴリズムが必要になる。
• ADVI(自動微分変分推論)は正規
分布を用いた近似を行い一般の分布
への適用を行う方法。
MCMC法(マルコフ連鎖モンテカルロ法)
• モンテカルロ法:乱数を使って計算する方法
• マルコフ連鎖:次の状態への遷移確率は、現
在の状態にのみ依存する状態の列を生成する。
• 正しく行えば、サンプリングが不十分なこと
による誤差はあるが、系統誤差が生じない。
• 変数の数や、問題の性質により、サンプリン
グにかかる時間が多くなる。
• NUTSは、効率のよいMCMC法の一つ。
10
ベイズ統計を扱うPythonのライブラリ(1)
PyStan:
• StanのPythonラッパー
• モデルは、Stan言語で記述。
• Stan言語は、数式との対応がわかりやすい。
• NUTSによるサンプリング。ADVIも可能。
• StanのRラッパーであるRstanもよく使われてい
る。
• RStanには、解説書が多く市販されており、
Stanコードはそのまま、利用することが可能。
PyMC3:
• Theanoを基盤としている。
(Theanoは開発終了したが、PyMC3に関連
する部分のメンテナンスは継続中)
• モデルはPythonで記述。
• コードは、Pythonらしく書ける。
• NUTS、ADVIも可能
• 公式サイトにチュートリアル。
• 日本語や洋書で情報が手に入る。
実績があり、書籍などで情報が入手しやすいもの
後ほど
解説
11
ベイズ統計を扱うPythonのライブラリ(2)
今後の注目株
TensorFlowを基盤とするもの
TensorFlow Probability(TFP):
TensorFlow2を基盤にGoogleによ
り開発中。Bijectorによる柔軟な分布
の利用や速度などは、期待できるが、
書きにくい?
PyMC4:
TFPを基盤に開発中、現在、開発版
Edward:
TensorFlow1を基盤として、構築さ
れる。変分計算が得意。
Edward2:
TFPの一部として、開発中。
PyTorchを基盤とするもの
Pyro:
Uberにより開発中。記述は
TFPに比べてシンプル。
変分計算が速いよう。
Pixyz: 深層生成モデルの構築
Jax(Google製のより簡易な
自動微分ライブラリ、numpy
の感覚で使える)を基盤とす
るもの
NumPyro:
Pyroの一部機能をJaxを基
盤に構築。Pyroよりも高速。
12
PyMC3コードの例
ベイジアン線形回帰
MCMCのサンプリングを行う
𝑦 = 𝛼 + 𝛽𝑥 + 𝜀
𝜀には正規分布を仮定
ラベルの値を指定
𝜀が正規分布(平均:𝛼 + 𝛽𝑥, 標準偏差:𝜎)を指定
𝛼、𝛽、𝜎(𝜀の標準偏差)の事前分布を指定
13
特徴量の値を指定
PyMC3コードの例
ベイジアン線形回帰の改良
外れ値があることを考慮して、𝜀にスチューデントのt分布を使用
⇒外れ値以外の点で、当てはまりがよくなった。
𝑦 = 𝛼 + 𝛽𝑥 + 𝜀
𝜀にはスチューデントのt分布を仮定
14
データ点が少ない場合
データ点が少ない⇒学習モデルを得るのが難しい
15
階層モデルの導入
𝛼𝑖 = 𝛼 + 𝜀𝑖
𝛼
𝛽𝑖= 𝛽 + 𝜀𝑖
𝛽
෤𝑦𝑖 = 𝛼𝑖 + 𝛽𝑖 ෤𝑥𝑖 + 𝜀𝑖
点が少なくても
モデルが得られる。
16
今後の期待
鈴木雅大特任助教(東京大学松尾豊研)
博士論文「深層学習と生成モデルによるマルチモーダル学習に関する研究」より
17
関連書籍
PyMC3のサンプルコードが付いている
 「Pythonで体験するベイズ推論-PyMCによるMCMC入門-」キャメロン・デビッドソン=ピロン著
玉木徹訳 森北出版 (Git Hubから可、PyMC2、PyMC3、TensorFlow Probability)
 複雑なモデルは扱わないが基本的な概念や応用例などが豊富
 「Pythonによるベイズ統計モデリング」 Osvaldo Martin著 金子武久訳 共立出版 (出版社のサ
イトから可)
 階層モデルなどの比較的複雑なモデルの解説も含んでおりバランスが取れている。
 「Pythonによるベイズ統計モデリング」中妻輝夫著 朝倉書店(Git Hubから可)
 時系列モデル、回帰モデル、判別モデルの解説がある。
PyStanの学習には、Rstanの解説本が使える
 「StanとRでベイズ統計モデリング」松浦健太郎著 石田基広監修 共立出版
18
関連書籍とWebサイト
ベイズ統計の理論
 「機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)」須山敦志著 講談社
 式の導出が丁寧にされている。以下のPRMLが難しいと思う人におすすめ。変分法の解説も。
 「パターン認識と機械学習」上下 C.M. ビショップ著 元田 浩、栗田多喜夫、樋口知之、松本裕治、村田昇監訳 丸善
 いわゆるPRML(Pattern Recognition and Machine Learning)、ベイズ統計と機械学習の定番本。
Webサイト
 PyMC3のサイト(チュートリアル、サンプルコードあり) https://docs.pymc.io/
 Hello Cybernetics (NumPyro, Pyro, jax, Edwardsなど最新のライブラリの情報や理論面に詳しい)
https://www.hellocybernetics.tech/
 作って遊ぶ機械学習(須山さんによるベイズ統計の解説) http://machine-learning.hatenablog.com/
動画
 TensorFlow User Group Meetup - ベイズ推定分科会 2020/9/5に行われた5時間のWebセミナー、登録者700名超
https://www.youtube.com/watch?v=7rBI11Rze2c
19
まとめ
 AIの普及
 Auto-tunerの普及 ⇒ エンジニア、データサイエンティストとしての差別化は?
⇒ ベイズ統計・ベイズモデリング
 細かな調整が行える。実応用したときの汎化性能、データの誤差の性質の考慮。デー
タ数が少ない時への対応。解釈性。
 PyMC3、PyStanなどを利用すれば、比較的容易に可能。
 ベイズモデリングとニューラルネットワークなどの組み合わせは、今後の発展が期待
される分野。
 ベイズモデリングは、マーケティングなどの分野においてはすでに、多くの実績があ
る。
20

Contenu connexe

Tendances

数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPythonYosuke Onoue
 
「長野で語るStapyのビジョン」
「長野で語るStapyのビジョン」「長野で語るStapyのビジョン」
「長野で語るStapyのビジョン」Takeshi Akutsu
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方Kimikazu Kato
 
WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPythondrillan
 
機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPythonKimikazu Kato
 
Japan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_otaJapan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_ota博三 太田
 

Tendances (7)

数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPython
 
「長野で語るStapyのビジョン」
「長野で語るStapyのビジョン」「長野で語るStapyのビジョン」
「長野で語るStapyのビジョン」
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方
 
Sapporo20140709
Sapporo20140709Sapporo20140709
Sapporo20140709
 
WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPython
 
機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython
 
Japan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_otaJapan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_ota
 

Similaire à Pythonとベイズ統計

最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティス最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティスMasato Fujitake
 
20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdfShintaro Fukushima
 
Machine learning at swift3
Machine learning at swift3Machine learning at swift3
Machine learning at swift3Daisuke Nagata
 
みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様Takeshi Akutsu
 
The stumbling block of team development in the growth phase
The stumbling block of team development in the growth phaseThe stumbling block of team development in the growth phase
The stumbling block of team development in the growth phasessuser1e9374
 
Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjpPython エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjpTakeshi Komiya
 
Pythonのプロファイリング
PythonのプロファイリングPythonのプロファイリング
Pythonのプロファイリングysakaguchi
 
Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk Katayanagi Nobuko
 
Street academy
Street academyStreet academy
Street academy秘密
 
パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!泰史 栃折
 
グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦
グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦
グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦Rakuten Group, Inc.
 
BPStudy#116(PyQ開発秘話)
BPStudy#116(PyQ開発秘話) BPStudy#116(PyQ開発秘話)
BPStudy#116(PyQ開発秘話) Haruo Sato
 
Watson IoTとIBM DSXでWatsonと役割分担
Watson IoTとIBM DSXでWatsonと役割分担Watson IoTとIBM DSXでWatsonと役割分担
Watson IoTとIBM DSXでWatsonと役割分担Kenichi Inoue
 
プログラミングを学ぶと何が良いのか
プログラミングを学ぶと何が良いのかプログラミングを学ぶと何が良いのか
プログラミングを学ぶと何が良いのかHaruo Sato
 
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」Yoshinori Yamanouchi
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016Akinori Kohno
 
オンラインPython学習サービスPyQの価格決め
オンラインPython学習サービスPyQの価格決めオンラインPython学習サービスPyQの価格決め
オンラインPython学習サービスPyQの価格決めHaruo Sato
 
NewsPicksにおける記事の推薦
NewsPicksにおける記事の推薦NewsPicksにおける記事の推薦
NewsPicksにおける記事の推薦Akira Kitauchi
 
kintone Cafe Tokyo vol.5/ultra fast recovery
kintone Cafe Tokyo vol.5/ultra fast recoverykintone Cafe Tokyo vol.5/ultra fast recovery
kintone Cafe Tokyo vol.5/ultra fast recoveryTakahiro Kubo
 
Pythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きました
Pythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きましたPythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きました
Pythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きましたhide ogawa
 

Similaire à Pythonとベイズ統計 (20)

最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティス最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティス
 
20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf20230216_Python機械学習プログラミング.pdf
20230216_Python機械学習プログラミング.pdf
 
Machine learning at swift3
Machine learning at swift3Machine learning at swift3
Machine learning at swift3
 
みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様
 
The stumbling block of team development in the growth phase
The stumbling block of team development in the growth phaseThe stumbling block of team development in the growth phase
The stumbling block of team development in the growth phase
 
Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjpPython エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjp
 
Pythonのプロファイリング
PythonのプロファイリングPythonのプロファイリング
Pythonのプロファイリング
 
Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk
 
Street academy
Street academyStreet academy
Street academy
 
パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータ利活用を変える!オープンソース分散型PDS「Personium」を使ってみよう!
 
グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦
グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦
グローバル企業の中で「変化」を仕掛ける楽天技術研究所 Rakuten Institute of Technology の挑戦
 
BPStudy#116(PyQ開発秘話)
BPStudy#116(PyQ開発秘話) BPStudy#116(PyQ開発秘話)
BPStudy#116(PyQ開発秘話)
 
Watson IoTとIBM DSXでWatsonと役割分担
Watson IoTとIBM DSXでWatsonと役割分担Watson IoTとIBM DSXでWatsonと役割分担
Watson IoTとIBM DSXでWatsonと役割分担
 
プログラミングを学ぶと何が良いのか
プログラミングを学ぶと何が良いのかプログラミングを学ぶと何が良いのか
プログラミングを学ぶと何が良いのか
 
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016
 
オンラインPython学習サービスPyQの価格決め
オンラインPython学習サービスPyQの価格決めオンラインPython学習サービスPyQの価格決め
オンラインPython学習サービスPyQの価格決め
 
NewsPicksにおける記事の推薦
NewsPicksにおける記事の推薦NewsPicksにおける記事の推薦
NewsPicksにおける記事の推薦
 
kintone Cafe Tokyo vol.5/ultra fast recovery
kintone Cafe Tokyo vol.5/ultra fast recoverykintone Cafe Tokyo vol.5/ultra fast recovery
kintone Cafe Tokyo vol.5/ultra fast recovery
 
Pythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きました
Pythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きましたPythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きました
Pythonインタラクティブ・データビジュアライゼーション入門という本を共著で書きました
 

Pythonとベイズ統計