old school magic

機械学習に関する備忘録です。

MacでPythonの機械学習環境構築(2014年5月版)

この記事は古くなっています。
最新版の記事はこちらになります。


MacでPythonの機械学習環境構築(2015年2月版) - old school magic

概要

MacPythonの管理と環境構築の備忘録です。
色々試してみて今の形に落ち着いたのですが、コロコロ変わりそうな気もするので日付をつけときます。
簡単にまとめるとこんな感じです。

前回はこんな感じだったのでだいぶ変わりました。

前準備

バージョン管理システムはhomebrewを用います。
ソフトウェアをまとめて管理(インストールやアップデート、削除等)するためのソフトです。
homebrewについては次の解説が参考になります。

  • 公式

Homebrew — The missing package manager for OS X

  • インストール、使い方

MacOSX - パッケージ管理システム Homebrew - Qiita

# homebrewのインストール
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Pythonの導入・管理

pyenvを用います。
yyuu/pyenv · GitHub
Pythonをバージョンごとに個別に管理するためのソフトです。
Pythonに関して言えば、一つのPythonをアップデートして使うより、バージョンごとにPythonの環境を構築したほうが良いと思います。*1

# pyenv のインストール
brew install pyenv

pyenvを使う前に環境変数を設定してあげる必要があります。
.bash_profileに次のコマンドを書き足します。

# 環境変数の設定
export PATH="$HOME/.pyenv/shims:$PATH"

pyenvは様々なバージョンのPython(やサードパーティ)に対応しています。
次のコマンドでインストールできるPythonの種類を確認できます。

# pyenvでインストールできるPythonの確認
pyenv install -l

例えば、(2014年5月時点で)最新版のPython 3.4.0は、

pyenv install 3.4.0

でインストールできます。
デフォルトではユーザディレクトリの.pyenv以下にインストールされます。

機械学習ライブラリの構築

機械学習ライブラリとして、Anacondaを使います。
Anaconda Scientific Python Distribution

Python機械学習ライブラリだと、

  • numpy
  • scipy
  • matplotlib
  • scikit-learn

あたりが定番なのですが、Anacondaはここらへんをひとまとめにしてインストールしてくれます。個別にインストールするよりすごい楽です。iPythonとか便利ツールもインストールしてくれます。

Anacondaはpyenvでインストールできます。

# Anacondaのインストール
# 数百Mあるので結構時間かかります。10分くらい?
# バージョンは適宜最新版に書き換えてください
pyenv install anaconda-1.9.1

インストールしたらおまじない(再ハッシュ)しましょう。

pyenv rehash

pyenvでは使用するバージョンのPythonを選択できます。
先程インストールしたAnacondaに設定する場合は、

# 使用するPythonの選択
pyenv local anaconda-1.9.1
pyenv global anaconda-1.9.1

といった感じです。
ローカル環境とグローバル環境で使い分けられます。が、とりあえずは両方同じPythonに設定しておきます。

その他、pyenvでよく使うコマンドは

# 現在使ってるPythonの確認
pyenv version
# インストールされてるPythonの確認
pyenv versions
# Pythonのアンインストール
pyenv uninstall

あたりです。詳しくはここに。
pyenv/COMMANDS.md at master · yyuu/pyenv · GitHub

AnacondaでインストールされるPythonは2系です。
3系を使いたい場合はここから一手間入ります。

# Anaconda自体のアップデート
conda update conda
# Python3なAnacondaのインストール
conda create -n py33 python=3.3 anaconda
# 現在のターミナルをPython3+Anacondaに設定
source ~/anaconda/bin/activate py33

py33というのは環境名というもので、好きな名前を付けても大丈夫です。

なお、このままだとAnaconda+Python3を使用したい時、毎回

source ~/anaconda/bin/activate py33

とコマンドを打たなければいけません。

解決策ですが、私はiPythonを使う派なので、こんな感じでエイリアスしました。*2

# ipython3 で Python3+Anaconda+iPythonを起動できるように設定
# .bash_profileに書き加えてあげてください
alias ipython3="source ~/.pyenv/versions/anaconda-1.9.1/bin/activate py33; ipython"

参考
Python 3 support in Anaconda
AnacondaでPython3.3 - Qiita

これでPython3+機械学習環境が整いました。

余談

開発環境はSublime Text 3 + iPython (+ iTerm2)を使用してます。

*1:Pythonをアップデートするとpipでインストールしたソフトがまるまる死んで面倒なので。

*2:直接パスを通すという手もありますが、それだとpyenvで切り替えられなくなるので...

「パターン認識と機械学習」への遠回り 幕間 「統計を学ぶ際に心がけること」

統計学の目的の一つとして、「確率分布を推測する」というものがあります。
その確率分布を予測する方法として、最尤推定ベイズ推定などがあります。

統計を学んでいると、

  • 対数尤度を最大化すると良い予測になる
  • 対数周辺尤度*1を最大化すると良い予測になる

と出てきます(それぞれ最尤推定法とベイズ推定の一種である変分ベイズ法)。

そんな時ふいに、

  • どうして尤度最大化すると良いの?
  • 最尤推定ベイズ推定が良い保証はどこにあるの?

などと、迷ったり色々と勘違いしてしまうことがあると思います。*2

ですが、最尤推定ベイズ推定の比較は相当難しい話*3で、少なくとも統計学初学者がいきなりやれるような難易度ではないと思います。

個人的な意見ですが、分からないことがあった時、将来きっと分かると信じて勉強を進めていくのは大切な姿勢だと思います。
ですが、分からないことが勘違いの種にならないよう、用心しておいたほうがいいでしょう。

なので、最尤推定ベイズ推定の定義の違いをしっかりと理解し、どういった量を最適化しようとしているのか意識すれば、統計を学ぶ道中、とりあえず迷子にならずに済むのではないかと思います。

ちなみに、渡辺先生の本に、確率分布の推測方法やその精度の違いなどについて、詳しい説明が載っています。

ベイズ統計の理論と方法

ベイズ統計の理論と方法

タイトルではベイズ統計の本になっていますが、最尤推定ベイズ推定はどう違うか、どういう時に一致してどういう時に一致しないのか、ということ(=学習理論)についての本だと思います。*4
素晴らしい本なのですが、ものすごい難しいです(特に数学的な部分が)。3章くらいで一旦ギブアップしました。もうちょっと勉強が進んでからこの本に再挑戦したいと思います。

*1:紛らわしいことに対数尤度とは違う量です

*2:私は対数尤度と対数周辺尤度を混同していました。

*3:学習理論の領域だと思います

*4:もちろん、後半にベイズ統計の実現方法(変分ベイズMCMC)についての話題はちゃんと出てきます

「パターン認識と機械学習」への遠回り その6 「図解・ベイズ統計「超」入門」

その1 フリーソフトで作る音声認識システム
その2 自然言語処理のための機械学習入門
その3 はじめてのパターン認識
その4 キーポイント線形代数
幕間 機械学習と統計学
その5 キーポイント確率・統計

統計学には大きく分けて二つの考え方があります。フィッシャー主義とラプラス主義です。
フィッシャー主義が前回学んだいわゆる「従来の統計学」で、ラプラス主義が「ベイズ統計学」にあたります。
どちらの考え方にも利点・欠点があり、問題に適した考え方を選ぶべきらしいです。つまり両方勉強しろってことですね。
ということで今回はベイズ統計学について勉強しようと思います。

良いところ

イラスト多めの会話形式で分かりやすいです。ノリが軽くて取っ付き易いです。
非常にコンパクトな本ですが、ベイズ統計の基礎となる考え方をしっかりカバーしていると感じました。

「従来の統計学とどう考え方が違うのか」という視点で説明が進みます。
(例えば「統計量ではなく確率や確率分布が前面に出てくる」とか)
章ごとにしっかりまとめたり、登場人物が学んだことを振り返って気になったところをピックアップしたりと細かいフォローもしっかりしています。

ベイズ統計学のイメージをしっかり掴めるので、この本を読んでからベイズ統計学の本格的な入門書に進むと読みやすいのでは、と思います。

悪いところ

しいてあげるなら説明が丁寧すぎて、ちょっと冗長に感じるところです。

学べること

統計やベイズ統計の歴史、従来の統計学との違い、ベイズ統計の基礎、確率の基礎、実際の応用

追記

こういったノリの本が苦手という方には、同じ著者の次の本をオススメします。

史上最強図解 これならわかる!ベイズ統計学

史上最強図解 これならわかる!ベイズ統計学

上記の本に比べて少し詳しく説明していると思います。
言い換えると、上記の本はこちらの本に対してよくまとまっていると思います。

「パターン認識と機械学習」への遠回り その5 「キーポイント確率・統計」

その1 フリーソフトで作る音声認識システム
その2 自然言語処理のための機械学習入門
その3 はじめてのパターン認識
その4 キーポイント線形代数
幕間 機械学習と統計学

キーポイント確率統計 (理工系数学のキーポイント 6)

キーポイント確率統計 (理工系数学のキーポイント 6)

読んだ動機

統計学を学ぶ理由は「幕間 機械学習と統計学」に書いた通りです。
この本を選んだ理由は、前回読んだキーポイント線形代数がとても良かったので、キーポイントシリーズを読んでみたくなったからです。

良いところ

確率・統計について、学ぶ意義や確率・統計の基礎、検定や確率過程といったことついて幅広くおさえています。
「キーポイント線形代数」と同じく図や例題が多く、イメージしやすかったです。
学ぶ上でのフローチャートや、数多い確率分布などを表で整理しているのが読む助けになりました。
やはりキーポイントシリーズは良書が多いな、と改めて感じました。

悪いところ

全体的に分かりやすかったのですが、細かい数式で結構躓くところが多いかもしれません。
特性関数などが出てくるので、微積分を噛ってから読んだほうが良いと思います。
本のコンセプト(厳密な数学書に誘うこと)からしてしょうがないことではありますが、証明を略したり厳密でないところがあったりします。これに関しては統計学の本格的な入門書を読むことで対応しようと思います。

学べること

統計学を学ぶ意義、確率・統計の基礎、代表的な確率分布の説明、検定や推定の実際、確率過程

追記

他の統計学の入門書として、こんな本も読みました。

統計学 (サイエンス・パレット)

統計学 (サイエンス・パレット)

【書評】統計学 (サイエンス・パレット) - old school magic
入門書としても良いとは思いますが、統計学を少し勉強した後の知識の整理に役立つと思います。

「パターン認識と機械学習」への遠回り 幕間 「機械学習と統計学」

機械学習の勉強を始めた当初、統計学を学ぶ必要性をあまり感じていませんでした。
というのも、統計学自体をほとんど知らなかったので、統計学についてちょっと変なイメージを持っていたからだと思います。

しかし、機械学習を勉強するにつれ、統計学機械学習が非常に似ている、というかほぼ同じ何じゃないかという考えを持つようになりました。
機械学習統計学、またデータマイニングには、「データを集め、目的を持って処理し、結果を考察する」という考え方が根幹にあるのだと思います。
これらを区別して考えるより、それぞれの立場からこの「根幹にある考え」へアプローチしたほうが有意義なのではないかと今は感じています。

また、機械学習には大きく分けて「識別モデル」と「生成モデル」の二つがあり、特に「生成モデル」と統計学に高い親和性があると思います。
しかし、機械学習パターン認識の入門書だと、紙面の都合上、どうしても「識別モデル」の説明が多いと感じました。*1
なら生成モデルの勉強の一環として、いっそ統計学を基礎から学んでしまおう!と考えました。

こういった理由から、機械学習の勉強と一環して、統計学の勉強をしていこうと思います。

*1:個人的な考えですが、生成モデル≒統計学なので、統計学をまるまる生成モデルの項に突っ込むのが本のボリューム的に厳しいのかな?と思います。というか私の偏見かもしれません。

「パターン認識と機械学習」への遠回り その4 「キーポイント線形代数」

その1 フリーソフトで作る音声認識システム
その2 自然言語処理のための機械学習入門
その3 はじめてのパターン認識

キーポイント線形代数 (理工系数学のキーポイント 2)

キーポイント線形代数 (理工系数学のキーポイント 2)

読んだ動機

前回までの三冊を読み、数学力に不安を覚えました。
特に主成分分析のあたりで固有値問題が出てきた時、固有値固有ベクトルについてはなんとなく覚えていたのですが、どういう意味を持っているのか良く分かっていないことに気付いたので、この本を読むことにしました。

良いところ

非常に分かりやすいです。図や例題を豊富に用いてるので非常にイメージしやすく、スムーズに読むことができました。
特に固有値固有ベクトルの持つ意味をイメージできるようになったのが大きい収穫でした。

この本を読んだ後にはじめてのパターン認識の主成分分析の項を読みなおしたのですが、この本が理解の助けになったと感じました。

悪いところ

しいてあげるなあら、あまり厳密な本ではないことかもしれません。
しかし、本の意図が「厳密な数学書に誘うこと」なので、厳密でないのは意図通りなのだと思います。

学べること

連立方程式から始まり、行列、行列式逆行列、線形変換、ランクや線形代数の基本定理、固有値、対角化、標準系と線形代数の基礎をひと通り

【書評】統計学 (サイエンス・パレット)

統計学 (サイエンス・パレット)

統計学 (サイエンス・パレット)

統計学について、数式を用いないで説明した一冊です。

統計(と確率)の基礎からデータの集め方・実験・結果の考察といった、統計学の一連の流れを簡単に説明しています。
その中でも特に「どういった心構え・手順で統計処理をするべきか」について重点的に説明している印象を受けました。
統計モデルの説明もしていますが、個人的には(数式を用いていない*1ので)ちょっと分かり辛かったです。*2

統計学を学びたいけど数式が苦手な人*3や、統計学を一度学び、知識の整理をしたい人などにおすすめできると思います。
私は統計学を多少勉強してからこの本を読んだので、統計の考え方や全体像を俯瞰できてとても有意義でした。
あとがき含めて150ページくらいなので、通勤中や待ち時間などに読むことができると思います。

*1:平均や分散、最小二乗法なども言葉だけで説明しています

*2:用語についても説明や具体例がちょっと少ないところもありましたが、このページ数だとさすがに難しいのかも

*3:初めて勉強する人にとってはちょっと堅すぎるかも