そろそろちゃんと機械学習を勉強しようと思い、ついでに Python をやり始めています
そういえば、大学生のときに Python を勉強しようと思って本を買ったことがあったんですが、当時はあんまりやる気もなくちょっとしか手をつけていませんでした
あの時ちゃんと勉強しとけばよかったなぁとか思ったり・・・
とりあえず、手持ちの Mac 上に数値計算や機械学習を実行できる環境を構築したのでその際の手順をまとめました
※以下の環境で動作することを確認しています
OS X Mavericks (10.9)
OS X Yosemite (10.10)
この記事では
1. 概要
2. Python とライブラリのインストール
3. PyDev のインストールとセットアップ
4. Hello Python !!!
5. まとめ
について説明します
1. 概要
今回は Python を使って数値計算、機械学習の開発ができる環境を構築します
ざっくりした手順としては、まず pyenv を利用して Python をインストールします
そして Miniconda を利用して、NumPy、SciPy、matplotlib、scikit-learn をインストールし、PyDev を使って Eclipse 上で Python コードが実行できるところをゴールとします
Python のバージョン2系、3系では大きく仕様が異なるらしく、インタプリタも様々なものが出ているとわかりました
まだそのへんの具合がよくわからないので、インタプリタやバージョンを手軽に切り替えられるように、pyenv を使って自由に動作環境を切り替えられるようにします
今回インストールする数値計算、機械学習に利用するライブラリについての説明です
NumPy
数値計算を効率的に処理するためのライブラリです
配列の操作がとても簡単になるので、行列計算には必須っぽいです
SciPy
様々な科学計算が実装されたライブラリです
内部でNumPyを利用しています
matplotlib
グラフ描画のライブラリです
内部でNumPyを利用しています
scikit-learn
機械学習に関する様々なアルゴリズムが実装されたライブラリです
上記のライブラリもバージョンの組み合わせが問題になることがあるようなので、Miniconda を使って切り替えられるようにしておきます
Anaconda を使うと最初からこれらのライブラリが全部入りで使えるようですが、今回は後からライブラリを入れるタイプの Miniconda を使おうと思います
IDE には個人的に使い慣れている Eclipse を使います
PyDev というプラグインをいれると Eclipse で Python の開発が行えるようになります
最後に pyenv でインストールした Python 環境を Eclipse から利用できるよう設定を行います
2. Python と各ライブラリのインストール
まず、ホームディレクトリに pyenv のリポジトリをコピーしてきます
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
~/.bash_profile にクローンしてきた pyenv へのパスを追加するコードを付け足します
export PYENV_ROOT="${HOME}/.pyenv" if [ -d "${PYENV_ROOT}" ]; then export PATH=${PYENV_ROOT}/bin:$PATH eval "$(pyenv init -)" fi
.bash_profile の内容を現在のシェルに反映します
source ~/.bash_profile
これは必須ではありませんが pyenv-pip-rehash をインストールします
pyenv で Python の環境を切り替えたときに pyenv rehash を自動で実行してくれます
brew install homebrew/boneyard/pyenv-pip-rehash
※2015/11/8 追記
以前掲載していた以下のコマンドでは pyenv-pip-rehash をインストールできなくなっていたため修正
brew install pyenv-pip-rehash
pyenv のインストールが終わったら、pyenv を利用して Python をインストールします
ここでは Miniconda をインストールします
# インスール可能なバージョンを確認する $ pyenv install --list # インストールする $ pyenv install miniconda3-3.7.0 # 現在のシェルで使う python のバージョンを指定 $ pyenv shell miniconda3-3.7.0 # インストール済みのバージョンと現在有効になっている python のバージョンを確認する $ pyenv versions
念のためシェルを再起動して、正しくバージョンが切り替えられることを確認します
# デフォルトの状態 $ python --version Python 2.7.5 # バージョンの切り替え $ pyenv shell miniconda3-3.7.0 $ python --version Python 3.4.2 :: Continuum Analytics, Inc. # pyenv-pip-rehash をインストールしていない場合は # バージョンを切り替えた後に以下を必ず実行します $ pyenv rehash
Miniconda を利用して NumPy、SciPy、matplotlib、scikit-learn をインストールします
$ conda install numpy=1.8 scipy matplotlib scikit-learn
特にバージョンを指定しなければ最新版がインストールされますが、現時点の最新版である SciPy 0.14.0 と NumPy 1.9.1 の組み合わせだと SciPy の test でエラーが大量に発生します
NumPy 1.8系 にするとエラーが出なくなったので、ここでは NumPy 1.8 をインストールします
※この issue と似たようなエラーなんですが、今回は Python3 で動かしているのでこれとは別のエラーかもしれません
Many scipy.sparse test errors/failures with numpy 1.9.0b2 · Issue #3853 · scipy/scipy · GitHub
さっそく Miniconda にしたメリットがありました
インストール済みのパッケージを確認します
$ conda list # packages in environment at /Users/[ユーザー名]/.pyenv/versions/miniconda3-3.7.0: # conda 3.7.3 py34_0 dateutil 2.1 py34_2 freetype 2.4.10 1 libpng 1.5.13 1 matplotlib 1.4.0 np18py34_0 nose 1.3.4 py34_0 numpy 1.8.2 py34_0 openssl 1.0.1h 1 pip 1.5.6 py34_0 pycosat 0.6.1 py34_0 pyparsing 2.0.1 py34_0 python 3.4.2 0 python-dateutil 2.1 <pip> pytz 2014.9 py34_0 pyyaml 3.11 py34_0 readline 6.2 2 requests 2.4.3 py34_0 scikit-learn 0.15.2 np18py34_0 scipy 0.14.0 np18py34_0 setuptools 7.0 py34_0 six 1.8.0 py34_0 sqlite 3.8.4.1 0 tk 8.5.15 0 xz 5.0.5 0 yaml 0.1.4 1 zlib 1.2.7 1
最後に python を起動して NumPy、SciPy、matplotlib のテストを実行します
>>> import numpy >>> numpy.test('full')
>>> import scipy >>> scipy.test('full')
>>> import matplotlib
>>> matplotlib.test()
scikit-learn のテストは nose でテストが用意されているようなので bash シェルから以下を実行します
nosetests --exe sklearn
ずらーーーーーーーーーーっと warning や実行中の出力が表示されます
最後に以下のように "OK" と表示されれば問題なく動作します
OK (KNOWNFAIL=6, SKIP=8)
ここで以下のように "FAILED" となる場合は、Python やライブラリのバージョンを確認してください
FAILED (KNOWNFAIL=276, SKIP=922, errors=326, failures=42)
matplotlib のテストは 2つエラーとなって fail になりました
グラフの描画をやるだけなので、とりあえずここは無視しても差し支えないかと思います
※おまけ
Miniconda の存在を知る前に NumPy、SciPy を手動でインストールしてしまったので、一応その際の手順も残しておきます
・NumPy のインストール
pip3 install numpy
・SciPy のインストール
pip3 install git+http://github.com/scipy/scipy/
※pip3 install scipy でもOKです
SciPy のインストール時には恐らくいろいろエラーが出るはずです
fortran のコンパイラと cython が無いことが原因でエラーとなっていました
gfortran をインストール
※現在は gcc に含まれているそうなので gcc をインストールします
brew install gcc
・cython のインストール
easy_install-3.3 cython
これで再度、SciPy のインストールを試みます
以下の記事を参考に、コンパイラを指定してインストールしてください
エラーを出さずにScipyをインストールする - PASL
・matplotlib のインストール
pip3 install matplotlib
・scikit-learn のインストール
pip3 install scikit-learn
pip はソースからコンパイルしてインストールしているようなので、SciPy でエラーが発生するのはMac にデフォルトで入っているコンパイラが原因のようです
Miniconda でインストールする場合はコンパイル済みのバイナリを取得してくるだけなので、この点については問題ありません
こういったライブラリの管理ツールはとても便利ですね
(参考リンク)
http://itbc-world.com/home/rfm/r%E3%81%AE%E8%A8%AD%E5%AE%9A/scipy%E3%81%AE%E8%A8%AD%E5%AE%9A/
Errors in tests of Scipy · Issue #12 · Homebrew/homebrew-python · GitHub
3. PyDev のインストールとセットアップ
Eclipse に PyDev をインストールします
※僕の Eclipse 環境では Pleiades で日本語化しちゃっているので、デフォルトで使っている方は項目名をいい感じに読み替えてください・・・
[ヘルプ] → [新規ソフトウェアのインストール] を選択します
[作業対象] に以下の URL を入力し、[PyDev] にチェックを入れます
http://update-production-pydev.s3.amazonaws.com/pydev/updates/site.xml
※2015/2/7 追記
以前掲載していた以下のURLはリダイレクトされていました
http://pydev.org/updates
インストールが始まって以下の画面が表示されたら、忘れずにチェックを入れて [OK] をクリックします
※チェックを忘れるとインストールされません・・・
インストールが完了したら、Python の実行に使用するインタプリタを設定します
[環境設定] → [PyDev] → [インタープリター] → [Python Interpreter] を選択し、[新規] ボタンをクリックします
Select Interpreter の画面が表示されたら、実行可能ファイルの欄に以下のパスを入力します
これは pyenv でインストールしたインタプリタのパスです
/Users/[ユーザー名]/.pyenv/versions/miniconda3-3.7.0/bin/python
インタープリター名にはバージョン等のわかりやすい名前をつけておきます
pyenv で表示される環境名をそのまま使えばいいかと思います
入力できたらOK をクリックします
次の画面でも OK をクリックします
環境設定の画面に、設定したインタプリタが表示されていることを確認し OK をクリックして閉じます
pyenv でインストールした他のバージョンも設定したい場合は、同じようにインタプリタの実行ファイル、インタプリタ名を変えて登録すればいくつも追加することができます
4. Hello Python !!!
ここまでで Eclipse 上で Python が実行できる環境が整いました
さっそく Python のコードを実行してみましょう
PyDev のパースペクティブに切り替えて、新規のプロジェクトを作成します
[PyDev プロジェクト] を選択して [次へ] をクリックします
適当なプロジェクト名を入力して、
- 文法バージョン 3.0
- 使用するインタプリタ ※先ほど登録したもの
をそれぞれ選択して [完了] をクリックします
作成されたプロジェクトを選択した状態で、[ファイル] → [新規] → [PyDev モジュール] を選択します
[name] には "test" を入力して [完了] をクリックします
テンプレートは Empty を選択します
ここで作成された test.py ファイルに以下のコードを書いて保存します
print("Hello Python!!!")
[実行] → [実行] をクリックします
[Python 実行] を選択して [OK] をクリックします
コンソールに "Hello Python !!!" と表示されたら完成です!
5. まとめ
無事環境を構築することができたでしょうか?
まだまだ機械学習も Python も初心者ですが、使いこなせるようにがんばって勉強していきます
最終的には機械学習やデータ解析を行うサーバーを構築することが目的なので、有益な情報があれば記事を書いていこうと思います
世の中には既にとんでもなく大量のデータが存在していますが、オープンデータ、IoT が広まることで僕らが扱うことのできるデータ量は更に爆発的に増えていきます
その時に外部のサービスを利用して整形、分析済みのデータを得ることは簡単にできるはずですが、そのサービスのフィルタを介したデータしか見れなくなると思っています
そうなってしまうと、たくさんのデータにアクセスできることのメリットが薄れてしまいますよね
大量のデータから自分たちにとって "本当に" 有用な情報を見つけ出すためには、これらのデータを自分たちで分析する必要があると思いませんか?
もちろんデータが全てではないですし過去から未来をみることはできないと思っていますが、自分の脳で動くためのツールとして身につけていきたいです
今回はそんな HowTo の記事でした!