Pythonで機械学習アプリケーションの開発環境、具体的にはNumpy/Scipy/scikit-learnを導入する手順について解説します。
なお、環境はPython3ベースを想定しています。
Minicondaベース(推奨)
機械学習系のパッケージはコンパイルが面倒なものが多いため、コンパイル済みバイナリをインストールできるconda
(Miniconda)での環境構築を推奨します。
まずはPython本体(Python3想定)、パッケージ管理ツールであるpip、仮想環境を作成するvirtualenv、といった基本的な環境の構築を行います。
※virtualenvについては今回(condaを使う場合)は不要ですが、Pythonで開発を行うなら入れておくべきパッケージなので併せて入れておきます。
Mac/Linux
デフォルトのPythonと分けてインストールするため、pyenvを利用します。
- pyenvのインストール
- Mac: 【Mac】Pythonのインストール+pyenvの使い方について
- Linux: PyenvによるPython3.x環境構築(CentOS, Ubuntu)
# confirm installation
pyenv --version
# show python environments list
pyenv install -l
# install newest miniconda
pyenv install miniconda3-x.x.x
# refresh pyenv
pyenv rehash
# activate installed python environment globally
pyenv global miniconda3-x.x.x
- pipのインストール: get_pip.pyでインストール(Python3.4を使うならensurepipでOK)
- virtualenvのインストール:
pip install virtualenv
各プロジェクトで使用するPythonを切り替えたい場合は、pyenv local x.x.x
で設定できます。
なお、pyenvで新しいPython環境をインストールした後はpyenv rehash
が必要です(こちら参照)。忘れがちなので注意してください。
Minicondaのインストールが完了したら、conda
で、機械学習用の仮想環境ml_env
の構築を行います(名前は何でもいいです)。
conda create -n ml_env numpy scipy scikit-learn matplotlib cython jupyter
作成ができたら、この機械学習用の仮想環境を有効化してみます。
source activate ml_env
・・・でいいはずなんですが、pyenvを使っているとpyenvのactivate
とcondaのactivate
がバッティングするようで、シェルが落ちるケースがあります。
回避方法としては、condaのactivateをきちんとフルパスで指定します。conda info -e
でcondaで作成した仮想環境の場所を確認し、そこのbin
にあるactivate
を起動します。
conda info -e
# conda environments:
#
ml_env /usr/local/pyenv/versions/miniconda3-3.4.2/envs/ml_env
root * /usr/local/pyenv/versions/miniconda3-3.4.2
source /usr/local/pyenv/versions/miniconda3-3.4.2/envs/ml_env/bin/activate ml_env
ただ、これだと面倒です。pyenv local
ではMinicondaで作成した環境も指定できるようなので、pyenv local miniconda3-3.4.2/envs/ml_env
の方が楽だと思います。
Windows
- Pythonのインストール: Miniconda
- pipのインストール:
conda install pip
- virtualenvのインストール:
pip install virtualenv
※Python3.5ベースのminicondaは、Visual Studio 2015用のVisual C++ランタイムが必要になります。これがインストールされていないと、インストール時にエラーが発生するので注意(2015/11/13現在。そのうち対応されるはず。 Python 3.5 missing VCRUNTIME140.dll)。
Minicondaのインストールが完了したら、コマンドプロンプトからconda
で機械学習用の仮想環境ml_env
の構築を行います(名前は何でもいいです)。
conda create -n ml_env numpy scipy scikit-learn matplotlib cython jupyter
作成ができたら、この機械学習用の仮想環境を有効化してみます。
activate ml_env
virtualenvベース(Pythonに慣れている人向け)
Minicondaを使わない場合(virtualenvを使う場合)は、Numpy/Scipyのコンパイルが必要になります。
以下では、その環境の構築手順を説明します。Python・pip・virtualenvは既に入っているものとします。
Mac
gcc/gfortranをインストールする必要があるので、XcodeとXcode CommandLine Toolsをインストールします。
Xcodeコマンドラインツールは、Xcodeインストール後以下のコマンドでインストールできます。
xcode-select --install
scipyのインストールにはgfortranが必要なので、こちらも導入しておきます。
これで環境は整ったはず・・・なので、動作を確認します。適当なフォルダを作成し、そこに機械学習用の仮想環境を作成してみます。
こちらのGistにあるrequirements.txtを使用します。
mkdir ml_env_test
cd ml_env_test
# 仮想環境を作成
virtualenv venv
# 仮想環境を有効化
source venv/bin/activate
# GitHubのRAWからrequirements.txtを取得(普通にコピーしてテキストファイルを作ってもよい)
curl https://gist.githubusercontent.com/icoxfog417/420ac8eb3fad524ee2d6/raw/ac4122eb7b53b40274d2e7ced224abaa28a383c7/requirements.txt > requirements.txt
# 依存ライブラリをインストール
pip install -r requirements.txt
scipyのインストールはかなり遅くまたメモリも食うため、Chromeとか動かしながらやっているとMemoryErrorを食らいます。コンパイルが通ることを祈り、静かに待ちましょう。
pip install
が完了すれば、動作確認は完了です。
Linux(Ubuntu)
以下をapt-getすれば大丈夫・・・だと思います(Ubuntu 14.04)。
build-essential
gfortran
libgfortran3
python-dev(python3-dev)
libblas-dev
libatlas-base-dev
cython
仮想環境の構築コマンドはMacと同様のため、上記を参照してください。
Windows
Windowsでコンパイルを通すのは至難の業なので、こちらからコンパイル済みバイナリをダウンロードしてきてインストールします。
Unofficial Windows Binaries for Python Extension Packages
こちらで取得できる.whl
ファイルを使って、pip install <file_path>
でインストールしていきます。必要なライブラリはこちらのrequirements.txtの通りです。
mkdir ml_env_test
cd ml_env_test
# 仮想環境を作成
virtualenv venv
# 仮想環境を有効化
venv\Scripts\activate
# (上記サイトから.whlファイルを落としてくる)
# .whlファイルをインストールしていく(以下はnumpyの例)
pip install numpy‑1.9.2+mkl‑cp34‑none‑win32.whl
あくまで自力でコンパイルする場合はVisual Studio、MinGW/Cygwinなどの導入が必要になるのでだいぶいばらの道です。よほどのことがない限りやめておいた方がいいと思います。
詳細はこちらをご参考ください。
自動構築技術を利用
koudaiiiさんがDocker、shiracoさんがAnsibleを用意してくれたので、これで入れられます。
koudaiii/ml-handson
shiraco/ansible_ipython_machineleaning_bootstrap_conda
動作確認
仮想環境の有効化(virtualenvの場合はプラスpip install)に成功したら、試しにjupyter notebook
を起動してみます。scikit-learnの解説をしたリポジトリを用意しているので、それが見られるか確認してください。
git clone https://github.com/icoxfog417/scikit-learn-notebook.git
cd scikit-learn-notebook
jupyter notebook
その他参考資料
- condaコマンドの使い方: Python Conda Tips