OS X Mavericksにpython3.3/numpy/scipy/matplotlib/scikit-learnをインストールする
この記事は古くなっています。
最新版の記事はこちらになります。
MacでPythonの機械学習環境構築(2015年2月版) - old school magic
内容はタイトル通りです。
OS X Mavericksにアップデートしてpython関係のインストールがうまく行かなくなった方に参考になれば嬉しいです。(python3に関してはあんまりMavericks関係ないかも。)
pythonは2系と3系を両方使いたいので、Homebrewを使ってインストールします。
- 公式
Homebrew — The missing package manager for OS X
- インストール、使い方
MacOSX - パッケージ管理システム Homebrew - Qiita
- アンインストール
Homebrewのアンインストールと再インストール: 黄昏てなんかいられない
Home · Homebrew/homebrew Wiki · GitHub
# python3のインストール brew install python3
brewを使ってインストールすると、pipやsetuptoolsも入ってきて大変楽です。
brewでインストールした場合python3系のコマンドは後ろに3が付きます。
(2系はそのまま)
scipyはgfortranに依存してるので先にインストールします
# gfortranのインストール brew install gfortran
numpy/scipyはbrewにあるパッケージは2系なので
(訂正 : brew searchしてみたら2系のnumpy/scipyはHomebrewになかったです...あれー...?)
pipでnumpy/scipyをインストールします。
# numpyのインストール pip3 install numpy # scipyのインストール pip3 install scipy
で次にmatplotlibをインストールするのですが、前はここでこけました。
macでPython3のmatplotlibを導入出来ませんでした - old school magic
とりあえずmatplotlibにはfreetypeとlibpngというパッケージが必要なのでインストール。
# freetypeのインストール brew install freetype # libpngのインストール(おそらく上のコマンドですでにインストールされてる) brew install libpng
ですがこのままmatplotlibをインストールしようとするとエラーが出ます。
(コンパイルしたけどfreetypeが見つからなかったよ!ってエラーです)
ピンポイントでStack Overflowに同じ質問ありました。
python - Unable to install matplotlib on Mac OS X - Stack Overflow
要するにfreetypeやlibpngがXCodeのコマンドラインツールによって変なところにインストールされちゃってるのが原因みたいです。(何故か/usr/X11/以下にインストールされてます。)
というわけで(/usr/local/に)リンクします。
# 魔法の言葉 sudo mkdir -p /usr/local/include sudo ln -s /usr/X11/include/freetype2/freetype /usr/local/include/freetype sudo ln -s /usr/X11/include/ft2build.h /usr/local/include/ft2build.h sudo ln -s /usr/X11/include/png.h /usr/local/include/png.h sudo ln -s /usr/X11/include/pngconf.h /usr/local/include/pngconf.h sudo ln -s /usr/X11/include/pnglibconf.h /usr/local/include/pnglibconf.h sudo mkdir -p /usr/local/lib sudo ln -s /usr/X11/lib/libfreetype.dylib /usr/local/lib/libfreetype.dylib sudo ln -s /usr/X11/lib/libpng.dylib /usr/local/lib/libpng.dylib
そしてmatplotlibとscikit-learnをインストールして完了!
# インストール成功! pip3 install matplotlib # scikit-learnのインストール pip3 install scikit-learn
補足
gfortran入れるの忘れると、
Library not loaded: /usr/local/Cellar/gfortran/4.8.2/gfortran/lib/libgfortran.3.dylib Referenced from: /usr/local/lib/python3.3/site-packages/scipy/special/_ufuncs.so Reason: image not found
って感じのエラーが出ます。
あとbrewでpython3を入れると
Setuptools and Pip have been installed. To update them pip3 install --upgrade setuptools pip3 install --upgrade pip To symlink "Idle 3" and the "Python Launcher 3" to ~/Applications `brew linkapps` You can install Python packages with `pip3 install <your_favorite_package>` They will install into the site-package directory /usr/local/lib/python3.3/site-packages See: https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python
って感じでSetuptoolsとPipも入れたよ!ってメッセージが出ます。
感想
コンパイルエラーに対処できるようになりたいです...
ディリクレ過程混合モデルへの変分推論適用について
この記事について
ノンパラメトリックベイズは分かりやすいチュートリアルは良く見かけるのですが、そこから一歩進んだ(日本語の)資料に行きつけなかったので、色々と論文読んで簡単に(数式を出さないで)まとめてみます。
ぶっちゃけるとCollapsed Variational Dirichlet Process Mixture Modelsの簡単な要約です。
あまり自信がないのでもし間違ってたりしたらご指摘お願いします。
前の記事よりはまともな説明ができれば...と思います。
事前知識としてノンパラベイズと変分推論の知識が必要ですが、ノンパラベイズは持橋さんの分かりやすい解説があるのでご紹介します。
ディリクレ過程や中華料理店過程、棒折り過程、交換可能性、そしてアルゴリズムについて説明しています。
変分推論についてですが、上田修功さんの解説がとても分かりやすいと思うので、読める環境がある方はぜひ。
変分推論だけでなく、周辺化変分推論やディリクレ過程への応用についても簡単に説明しています。
一応簡単に説明すると、変分推論はEMアルゴリズムの一般化(というかベイズ版)です。
「推定したい分布」が「独立な分布の積」に分解されると仮定し、各分布を「自分以外の全ての分布の期待値」で更新します。(厳密には平均場近似と言います。)
背景
ノンパラベイズの一種であるディリクレ過程(Dirichlet Process, DP)と、これを用いた混合モデル(Dirichlet Process Mixture Model, DPM)についてですが、これらは計算する際にサンプリングを用います。
サンプリングは色々な分布に適用できて便利なのですが、計算量がめちゃくちゃ多いです。
なのでDPMの計算量を減らすことが研究対象となったりするのですが、そのアプローチの一つが変分推論の適用です。
ベイズ理論に基づく方法だと、変分推論は理論的にもしっかりしていて、しかもサンプリングよりかなり速いので、計算量削減を考える時にはよく用いられるみたいです。
変分推論できる過程について
ディリクレ過程と等価な過程として、中華料理店過程(Chinese Restaurant Process, CRP)が用いられます。
が、CRPには変分推論を適用できないので、他のスキームを考える必要があり、
- Truncated Stick Breaking Process (TSB, 切り捨て棒折り過程?)
- Finite symmetric Dirichlet prior (FSD, 有限対象ディリクレ事前分布...?)
の二種類が提案されています。
TSBは、Stick Breaking Process(SBP, 棒折り過程)を十分な大きなクラスタ数Tで切り捨て(=truncate)したものです。
この過程は交換可能性が成り立たず、学習する順番によって確率分布が変わってしまいます。(対策あり)
FSDは、混合比の事前分布として、「十分大きなクラスタ数Kを持つ対象なディリクレ分布」を用います。
こっちは交換可能性が成り立ちます。
この2つのスキームは、十分大きなTとKについてほぼ同精度になります。
この2つのスキームに対して、変分推論(Variational Bayes Inference, VB)または周辺化変分推論(Collapsed VB, CVB)を適用します。
周辺化変分推論について
CVBとは、考えている分布のパラメータが解析的に積分消去可能である時、「パラメータの分布」を「真のパラメータの事後分布」に置き換えることによって変分推論の目的関数を簡略化する手法です。
カルバックライブラー情報量(真の分布との距離)も計算量も小さくなるので、精度も効率も上がります。
補足
ソフトウェア
先ほど紹介したCollapsed Variational Dirichlet Process Mixture Modelsの著者の一人である栗原さんによる実装が公開されてます。混合ガウス分布への適用です。
Variational Dirichlet Process Gaussian Mixture Model - Kenichi Kurihara's Site
matlabなので環境がある方はぜひ。
結果
精度的には従来のサンプリングを用いた手法とほぼ同じ精度を実現しています。
計算量は
CVB>VB>>>>>>>>>サンプリング
といった感じでしょうか。サンプリングだと終わらない実験も変分推論だと終わったりとかあるらしいです。
リファレンスまとめ
上で紹介したもの
- Collapsed Variational Dirichlet Process Mixture Models
- 最近のベイズ理論の進展と応用 (III) ノンパラメトリックベイズ
- CiNii 論文 - 最近のベイズ理論の進展と応用[IV] : 変分ベイズ法
- 変分ベイズ - 機械学習の「朱鷺の杜Wiki」
TSBの論文
IGMMの論文
まとめや個人的な感想
- 変分推論はどんなモデルにも適用できるわけではないのですが、適用できればサンプリングより遥かに少ない計算量で近似できます。ですが式の導出がすごい重いです。論文だとさらっと結果の式だけ書いてあるのですが、おそらくかなり複雑な計算があったんでしょうね...
- 変分推論化はこの前IBIS(機械学習と学習理論のワークショップ)に参加させて頂いたのですが、Deep Learningもグラフィカルモデルとみなして変分推論やサンプリングすると知りびっくりしました。
- FSDって普通の変分混合分布と何が違うんだろう...まだ理解が追いつけてないです...
変分推論じゃないけどサンプリングのIGMMやVB-GMMがpythonの機械学習ライブラリのscikit-learnで実装されててびっくりしました。(訂正:実装されてるIGMMはTSBPでした)
macでPython3のmatplotlibを導入出来ませんでした
タイトル通りです...
今まではインストールが簡単という理由でpython2をいじっていたのですが、やっぱり新しい言語に触れたいなと思い、python3に移行することを決意した...のですが...
インストールするのはpython3、numpy、scipy、matplotlib(こけた)、scikit-learnです。
管理が楽なので極力homebrewを使って行きます。
$ brew install python3 # python3のインストール $ pip3 install numpy # numpy のインストール $ pip3 install scipy # scipy のインストール
ここまでは(すごい警告でたけど)うまく行きました。
でmatplotlibなんですが、gitからクローンしてsetup.pyでインストールしようとしたのですが...
$ git clone git://github.com/matplotlib/matplotlib.git $ cd matplotlib $ python3 setup.py build # ここでこけました。 $ sudo python3 setup.py install
エラーを見た限りコンパイルエラーで、freetypeが入ってないよ!とのことなので
$ brew install freetype
したのですがすでにインストールされてたみたいで...
リンクされてないだけなのかなーと思い
brew unlink freetype brew link freetype
とリンクし直したのですがそれでもうまく行かず...(インストールし直してもダメでした)
homebrewを使わないで(ソースから)freetypeインストールしてみたんですがそれでもダメで...
freetypeちゃんと入ってるはずなのに...
python3使ってみたいので何とか解決します。
MarvericksになってからC++コンパイラ変わったみたいでしょっちゅうエラー出るしいっその事OS再インストールするのもいいかも...
「パターン認識と機械学習」に挑戦 その1 ベイズ理論あたり(8章から11章まで)
前回までいくつか機械学習の入門書を読み、今なら多少読めるのではとPRMLに挑んでみました。
目標はPRML/course - 機械学習の「朱鷺の杜Wiki」で紹介されてる中間(修士)レベルです。
どこから読もうかと考えたのですが、上巻は以前読ん(で死ん)だので下巻、それも機械学習の入門書だと省かれることの多いベイズ理論あたりに挑戦しました。
PRMLの下巻は6章と7章がSVM関係、8章から11章までがベイズ理論関係、12章が主成分分析、13章が隠れマルコフモデル、14章が決定木と言った構成となっています。
(ちなみに上巻は1章が機械学習の基礎、2章が確率分布、3章と4章が線形回帰/識別モデルの基礎、5章がニューラルネットワークです。)
「はじめてのパターン認識」では、線形モデルを最小二乗法からニューラルネットワーク、SVMといった流れで説明し、後半でEMアルゴリズムや主成分分析、決定木を個別に扱っていました。
前半の線形モデルの説明の流れはとてもわかり易いのですが、ベイズ理論でこれにあたるのがPRML下巻の8章から11章だと思います。というわけでこの4章を通して読んだので、その時にどういった資料を参考にしたかを書いていきます。
全体の流れ
ベイズ理論の機械学習への応用例として、現在大きく分けて2つの手法に分けられます。変分推論(10章)とサンプリング法(11章)です。
入門書でも扱われることの多いk-Means法やEMアルゴリズム(9章)は、変分推論の特別なケースであると考えられます。
また、変分推論とサンプリング法は条件付き確率や同時分布を扱うのですが、これを視覚的に扱えるように考案されたのがグラフィカルモデル(8章)です。
まず8章で確率に対する感覚を養い、9章でk-MeansやEMアルゴリズムを学び、10章でこれらをベイズ的な枠組みで一般化します。この流れで変分推論に対する理解を深めるのがPRMLの目的だったんですね...
変分推論は決定論的なアプローチであり、解析的に計算可能な近似をすることで、大規模な問題にも適用可能な手法です(と言ってもEMアルゴリズムは1次収束ですが)。
これに対し、サンプリング法は数値的なアプローチで近似することを考えます。これは計算量こそ変分推論より多いですが、より一般的に分布の近似に用いることができます。ちょうど長所と短所が対照的になっている訳ですね。
11章では変分推論への対比を意識しつつサンプリングを学びます。
8章
この章は計算もほとんどなく、事前知識も必要ないため、頑張れば他の資料に頼らなくても読み進めることができると思います。
それでも細かい疑問が多かったのですが、sleepy_yoshiさんのPRML読書会での資料(PRML読書会10回: 第8章グラフィカルモデル (前半) - 睡眠不足?!,
第11回PRML読書会: 第8章グラフィカルモデル (後半) - 睡眠不足?!)が多いに参考になりました。素晴らしいです。
9章, 10章
k-MeansからEMアルゴリズム、変分推論と一般化させつつ学ぶのが理解の助けになると思います。
k-MeansやEMアルゴリズムは他の入門書でも紹介されることが多いのでなんとなく理解できていたのですが、それでも何度も諦めそうになるくらい式変形が鬼でした。PRML副読本が式変形を丁寧に追っかけてくれています。
パターン認識と機械学習の学習―ベイズ理論に挫折しないための数学
- 作者: 光成滋生,竹迫良範
- 出版社/メーカー: 暗黒通信団
- 発売日: 2012/07
- メディア: 単行本
- 購入: 8人 クリック: 228回
- この商品を含むブログ (5件) を見る
amazonだと品切れですが、他サイトでは注文できるみたいです。(詳しくは【PRML同人誌】パターン認識と機械学習の学習-ベイズ理論に挫折しないための数学(光成 滋生 著)を参照)
ジュンク堂や紀伊国屋だと売ってたりします。
この辺りはちゃんと手計算で追えるようになりたいです。2週目で頑張ります。
また、上田修功先生が電子情報通信学会誌で連載されていたベイズ学習というシリーズが大変わかりやすかったのですが、有料(CiNiiに登録が必要)なので環境がある人は是非。
11章
サンプリングの話です。計算もさることながら概念が掴みにくいと思います。(僕もまだちゃんとわかってない...)
伊庭幸人先生が電子情報通信学会で執筆されたCiNii 論文 - 最近のベイズ理論の進展と応用[V・完] : モンテカルロ法の展開がとてもわかりやすかったのですが、これも有料ですね...
代わりに、伊庭先生の「ベイズ統計と統計物理」という本にサンプリングについてわかりやすい説明があったので紹介させて頂きます。
- 作者: 伊庭幸人
- 出版社/メーカー: 岩波書店
- 発売日: 2003/08/27
- メディア: 単行本
- 購入: 13人 クリック: 151回
- この商品を含むブログ (40件) を見る
変分推論やサンプリング法は統計物理に起源があり、この本では統計物理の観点からサンプリング法について説明しています。100Pくらいの本で大変読みやすいので是非。
なお、変分推論は物理学の文脈だと「平均場近似」だと言うそうです。(この本には載っていませんが)
もう一歩進んで
変分推論やサンプリングの話が分かると、最近の手法であるCollapsed Variational Bayes(CVB, 崩壊変分推論?周辺化変分推論だそうです)やノンパラメトリックベイズも理解できるようになると思います。
CVBは上田先生のCiNii 論文 - 最近のベイズ理論の進展と応用[IV] : 変分ベイズ法(有料)に、
ノンパラメトリックベイズは持橋先生の最近のベイズ理論の進展と応用 (III) ノンパラメトリックベイズ(無料公開されてる!!)に説明があります。
電子情報通信学会の「最近のベイズ理論の進展と応用」は他にも階層ベイズ(8章に関係)や逐次推論の話もあり、かなり参考になりました。
他の資料
まだ読めていないのですが、さらに詳しく知りたい場合は以下の本が参考になりそうです。
計算統計 I―確率計算の新しい手法 (統計科学のフロンティア 11)
- 作者: 汪金芳,手塚集,上田修功,田栗正章,樺島祥介,甘利俊一,竹村彰通,竹内啓,伊庭幸人
- 出版社/メーカー: 岩波書店
- 発売日: 2003/06/13
- メディア: 単行本
- クリック: 26回
- この商品を含むブログ (9件) を見る
計算統計 2 マルコフ連鎖モンテカルロ法とその周辺 (統計科学のフロンティア 12)
- 作者: 伊庭幸人,種村正美
- 出版社/メーカー: 岩波書店
- 発売日: 2005/10/27
- メディア: 単行本
- 購入: 5人 クリック: 78回
- この商品を含むブログ (32件) を見る
計算統計学の方法―ブートストラップ・EMアルゴリズム・MCMC (シリーズ予測と発見の科学 5)
- 作者: 小西貞則,越智義道,大森裕浩
- 出版社/メーカー: 朝倉書店
- 発売日: 2008/03/25
- メディア: 単行本
- 購入: 5人 クリック: 62回
- この商品を含むブログ (7件) を見る
今回はベイズ統計の中でも機械学習に関係する部分だけを拾ってきた形になるわけですが、ここまで勉強するとベイズ統計自体にも興味が湧いてきます。
- 作者: 渡辺澄夫
- 出版社/メーカー: コロナ社
- 発売日: 2012/03
- メディア: 単行本
- 購入: 1人 クリック: 4回
- この商品を含むブログ (2件) を見る
最後に
変分推論やサンプリングについて、なんとなくわかった気はするのですが...まだ実感がないのでしばらくはRで実装して理解を深めていこうと考えています。
来年にでも二周目に挑戦したいです。
「パターン認識と機械学習」への遠回り その3 「はじめてのパターン認識」
その1 フリーソフトで作る音声認識システム
その2 自然言語処理のための機械学習入門
前回までは音声認識だったり自然言語処理だったりとだいぶ範囲を狭めた本を読んで来ましたが、今回はパターン認識自体への入門書を読みます。
- 作者: 平井有三
- 出版社/メーカー: 森北出版
- 発売日: 2012/07/31
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 7回
- この商品を含むブログ (4件) を見る
どんな本?
THE 入門書、まさしくPRMLの前に読むべき本だと思います。
PRMLの上巻と下巻の6、7、9、12、14章に該当する内容が初学者にも分かるように優しく説明されています。易しくはありません。
200P程の本にここまでの内容が詰まっているとは思いませんでした。
Rによる実行例が豊富で、視覚的にも理解を得やすいのではないでしょうか。
章末問題の演習も掲載しているので独学に向いていると思います。
いいところ
基礎的な事項への説明が熱いです。
あと線形識別器の導入からSVMに至るまでの説明の仕方が非常にわかりやすいと思います。
気になったところ
主成分分析がちょっとわかりづらかったかも。。。
もう一回読みなおしてみます
何が学べるか
基礎、k近傍法、線形識別器、主成分分析、クラスタリング(混合モデル)、決定木とブースティング
「パターン認識と機械学習」への遠回り その2 「自然言語処理のための機械学習入門」
前回入門書への入門書まで読み終えたので、今回は入門書を読みます。
- 作者: 高村大也,奥村学
- 出版社/メーカー: コロナ社
- 発売日: 2010/07
- メディア: 単行本
- 購入: 13人 クリック: 235回
- この商品を含むブログ (37件) を見る
どんな本?
自然言語処理を題材にした機械学習の入門書です。
200Pくらいと読みやすく、式展開も自力で追え、例題も豊富なので2冊目以降に読む本としてオススメです。
扱っている手法も、自然言語処理特有なものではなく、一般的に用いられているものばかりなので、「自然言語処理に興味ないしなあ...」という方にも参考になるのではないかと思います。
いいところ
最適化手法について最初の章でちゃんと説明してるところがいいと思います。
例題が多いので、「実際に使うとこんな感じなのか」というイメージも掴めるんじゃないでしょうか。
あと、自然言語処理特有のあれこれについて補足してくれているのがポイント高いです。
気になったところ
第3章でEMアルゴリズムについて説明しているのですが、他の章では全て最尤推定を用いてるのにどうして混合分布だけEMアルゴリズムなのか、というところに説明が欲しかったです。
東工大の杉山先生の講義スライドがそれについて分かりやすかったのでご一緒にどうぞ。
あと、第5章での説明がもう少し詳しいといいのになーと思います。
特にHMMに例題がなかったのが惜しいです。
第5章については、巻末で紹介されてる参考文献を読んだりして補完しようと思います。
「パターン認識と機械学習」への遠回り その1 「フリーソフトでつくる音声認識システム」
機械学習の入門書として、代表的なのが「パターン認識と機械学習」という本です(通称PRML)。
先日、上巻を読み終わりました。
僕には少し早かったみたいです。。。
数式を追うのに必死になって、機械学習の概要がつかめなかったのが敗因かなーと思います。
というわけで、ちゃんと遠回りしてからPRMLに挑もうと思います。
「機械学習ってこういうのだよ!」、「こんな感じの手順だよ!」、「こういうタスクがあるよ!」、「基本的な考え方はこんな感じだよ!」、「こんな手法があるよ!」といった感じのふわっとした概要に関する本から、ちょっとずつ詳しいところに踏み込んでいくような感じで勉強していきたいと思います。
というわけで「この本を読むぞ!」という意思表明として、読もうと考えている入門書を紹介したいと思います。
(いくつか読み終えた本もあります。)
フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで
- 作者: 荒木雅弘
- 出版社/メーカー: 森北出版
- 発売日: 2007/10/17
- メディア: 単行本(ソフトカバー)
- 購入: 45人 クリック: 519回
- この商品を含むブログ (38件) を見る
どんな本?
全くのパターン認識/機械学習初心者が最初に本としておすすめなのがこの本です。
タイトルがタイトルなので、「フリーソフト...?」「音声認識はあんま興味ないなあ...」とスルーしてしまっていたのですが、手にとって見てあまりの分かりやすさに感動しました。
本の構成として「基礎編」と「実践編」に分かれています。第8章までが「基礎編」です。第9章からは実際にフリーソフトを動かして音声認識システムを構成する内容になってます。
概要
「パターン認識とは何か」の説明から始まり、アナログデータの取り込み、前処理、特徴抽出、識別部といったパターン認識システムの構成を4ページ目で超わかりやすい図で述べ、識別部以外の説明を最初の3章しっかりしています。
4章から識別部の説明が始まるのですが、最近傍法とパーセプトロンから始まり、SVMやニューラルネットへと手取り足取り誘ってくれます。
7章で統計的(確率的)な方法について簡単に述べ(PRMLは統計的手法についての機械学習入門書)、第8章でシステムの評価方法について、交差確認法などの説明をしてくれます。
第9章からは「実践編」なのですが、第9章と第10章で系列データを扱う方法や、隠れマルコフモデルについて説明しているので、実践にまだ興味がなくてもここまで読むことをおすすめします。
第10章まで130ページ足らずで、パターン認識の基本的な考え方をしっかり説明し、SVMや系列データまで誘ってくれる素晴らしい本です。
この本で「フリーソフト」と読んでいるのは、実際に広く使われているWekaなどといった機械学習の統合環境なので、それらへの入門としても役に立ちます。
メリット
一番最初に読む本として大事なのは、分かりやすさももちろんですが、「こんなことができるんだよ!」と読者の興味と意欲を掻き立ててくれることだと思います。この本はそれをバッチリみたしています。超おすすめです!
思ったより長文になってしまったので今回はここまでにします。
5冊ほど紹介しようと考えています。(5冊目はPRMLですが。。。)