Pythonで機械学習をするための環境を雑にセットアップする方法(Jupyter notebook環境、ディープラーニング環境含む)on Mac/Linux

f:id:karaage:20170925134020p:plain:w480

Pythonで機械学習を始める

 最近、Pythonで機械学習を勉強したり、色々試したりしています。そんな中、何度もやり直しているのが環境のセットアップ。必要なものを必要なときにインストールしてければ良いのですが、最近は「とりあえずこれだけ入れておけばOKかな」という感じに、環境を雑にセットアップすることが多くなってきました。需要があるかわかりませんが、自分としては大体のことができるので、良い感じかなと思っているので、自分のメモを兼ねて公開してみたいと思います。

 MacはOS X(試した環境はiMac Retina4K 21.5-inch 2017 + macOS Sierra 10.12.6)、LinuxはUbuntu 16.04を想定しています。

Pythonの機械学習環境セットアップ

 とりあえず、ターミナルを開いて、下記のコマンドをひたすらコピペしていけばセットアップできるようにしてみました。コマンドの羅列の後に、詳細を説明した記事へのリンクを用意しているので、コマンドの意味とか詳しく知りたい方はそちらを参照してみて下さい。

pyenv/pyenv-virtualenv/Anaconda インストール

 Macの場合は、以下コマンドでHomebrewのインストール.bashrcの設定及びpyenv/pyenv-virtualenvをインストールしましょう

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ cd
$ curl -L -O https://raw.githubusercontent.com/karaage0703/mac-dotfiles/master/.bash_profile
$ brew install pyenv
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ brew install pyenv-virtualenv
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
$ echo export PYENV_VIRTUALENV_DISABLE_PROMPT=1 >> ~/.bashrc
$ source ~/.bashrc

 Linuxの場合は、以下コマンドでpyenv/pyenv-virtualenvをインストールします

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
$ echo export PYENV_VIRTUALENV_DISABLE_PROMPT=1 >> ~/.bashrc
$ source ~/.bashrc

Anaconda仮想環境作成

 続いて以下コマンドでanacondaの仮想環境を作りましょう。mlはmachine learningの略のつもりですが、好きな名前でOKです。

$ pyenv install anaconda3-4.4.0 
$ pyenv global anaconda3-4.4.0
$ conda create -n ml anaconda
$ pyenv global anaconda3-4.4.0/envs/ml

 上記はpython3系となりますが、色々な事情でpython2系が良いという人は、上記の代わりに以下コマンドを実行下さい。

$ pyenv install anaconda2-4.4.0 
$ pyenv global anaconda2-4.4.0
$ conda create -n ml anaconda
$ pyenv global anaconda2-4.4.0/envs/ml

 Pythonをインストールする場合は以下でOKです。

$ pyenv install 3.7.3

 ただ、Linux(Ubuntu)で3.7系でNo module named '_ctypes'というエラーが出てインストールに失敗する場合は、以下コマンド実行する必要があるようです。

$ sudo apt install -y libffi-dev

参考:pyenvで3.7系のインストールに失敗したときのメモ

 これらのコマンドで何をしているか詳しく知りたい方は、以下記事を参照ください。

基本的なパッケージのインストール

 機械学習に(自分が)必要と考える以下のパッケージをインストールします。

  • jupyter
  • numpy
  • scipy
  • matplotlib
  • scikit-learn
  • pandas
  • pillow(PIL)
  • Open CV3
  • mglearn

 Open CV3とmglearn以外のパッケージに関しては、anacondaに含まれているので、何もする必要はないです。

 Open CV3とmglearnは以下コマンドでインストールできます。

$ pip install opencv-python
$ pip install mglearn

 これで一通りの環境が揃いました。

ディープラーニング系

 ディープラーニング系は別枠にしました。自分が入れるのは以下くらいです。

  • TensorFlow
  • Chainer

 インストールは、以下でTensorFlowとkerasをインストールします。

$ pip install tensorflow
$ pip install keras

 以下でChainerをインストールできます。

$ pip install chainer

 あと、たまにdot言語を使ってグラフ図を描くチュートリアルがあったりするので、Graphvizとpydotをインストールしておくと良いです。

 GraphvizはMacだと以下でインストールできます。

$ brew install graphviz

 Linuxだと基本は以下でインストールできると思います。

$ sudo apt-get install graphviz

 pydotはpipを使って以下コマンドでインストールできます(Mac/Linux共通)。

$ pip install pydot

 Anacondaの場合、graphvizはconda経由でインストールした方がよいようです。

$ conda install graphviz

 ディープラーニングのパッケージの注意点は、バージョンアップが激しく、バージョンが異なるため動かないコードが多いことです。必要に応じてバージョンを固定してインストールするようにしましょう。

 例えば、以下でChainerをVer1.8.1に固定してインストールできます。

$ pip install chainer==1.8.1

 詳細は以下記事参照下さい。

Jupyterの環境設定

 Jupyterは、pythonの対話式のインタープリタ(pythonとコマンド打つと出てくるモード)を更に便利にしたようなもので、実験手順の記録性にも優れています。markdownやtex記法も使えて最高ですね。そんなJupyterを見やすくするために、テーマを変更してみたいと思います。

 jupyterthemesをインストール

$ pip install jupyterthemes

 以下でテーマの一覧を確認

$ jt -l

 solarized lightが好きなのでセッティング

$ jt -t solarizedl -N -T

 後ろの-N -Tのオプションはツールバーとノート名を表示するためのもの

 以下コマンドでjupyterを起動すると、見た目がテーマに応じて変わります。

$ jupyter notebook

 Jupyter notebookは以下のような感じに手軽に実験のログをとれるので便利です。再現試験にも便利そうですね。リッチなコメントのソースコード。もしくは、ソースコードが書きやすいブログと捉えてもよいかもしれません。

f:id:karaage:20170925134020p:plain:w480

 ちなみにJupyter notebookでグラフを描くときは、以下の行が必要です。最初に宣言しておくのが良さそうです。

%matplotlib inline

 Jupyterに関しては、他に詳しく解説しているサイトがあるので、詳細の解説はそちらに譲ります。以下など参照下さい。

【Day-6】ゼロからJupyterの達人に!使い方の総まとめ。 - プロクラシスト

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma

研究・プログラミングメモはもうこれで完璧。markdownもtexもpythonを一緒に使える jupyterが超便利!! - プロクラシスト

Jupyter Notebookをより便利に使うために、色々まとめ - Qiita

 テーマ変更等の見た目のカスタマイズは、以下の記事が参考になります。
jupyterのテーマカラーが超簡単にかっこよくなる『jupyterthemes』 - プロクラシスト

かっこいいJupyter Notebook - Qiita

ニューラルネットの学習過程の可視化を題材に、Jupyter + Bokeh で動的な描画を行う方法の紹介 [Jupyter Advent Calendar 2017] - LESS IS MORE

実際に機械学習のあれこれを試して見る

 ここからは、セットアップした環境であれこれ試して見ましょう。今回セットアップした環境で、下記の例は全て動作します(きっと)。

SVM(Support Vector Machine)

 以下3行実行すれば、irisの分類問題が試せます。

$ git clone https://github.com/karaage0703/svm-pi
$ cd svm-pi
$ python svm.py

 実行すると、svm-piディレクトリに画像が入っています。

 詳しくは、以下参照下さい。

画像処理

 機械学習の花形といえば画像認識(?)なので、画像処理も必須になってきますね。下記記事参照下さい。

matplotlibでグラフ書く

 機械学習したら、結果の可視化は必須ですね。グラフを描きたい場合は以下記事など参照下さい。

ディープラーニング(Chainer)

 Chainerを使ったディープラーニングのアプリケーションです。基本的にバージョンは1.8.1を使っていますので、そこだけ注意ください。

ディープラーニング(TensorFlow)

 TensorFlowを使ったディープラーニングのアプリケーションです。

まとめ

 一通り現在のpythonの機械学習の環境セットアップと、今までやってきたことの一部をまとめてみました。環境セットアップも、バージョンの変化に応じて、やり方が刻々と変わっていて、pyenvを使うのは邪道とか、anacondaはダメだという意見もいるようですが、便利なものは便利なんですよね…悪貨は良貨を駆逐するというやつなのかもしれませんが、私は今のところ、この方法で困っていないので良しとしています。何が正しいかも、その人の目的やレベルによっても変わってきますからね。

 また、私が機械学習の勉強のために購入して良かったと思う本も上げておきます。これらの本の学習に関しても、私は基本的に本記事で紹介した環境で実施して、問題なく動いています。よければセットで参考にしてみて下さい。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

  • 作者:斎藤 康毅
  • 発売日: 2016/09/24
  • メディア: 単行本(ソフトカバー)

書籍の宣伝「からあげ先生のとにかく楽しいAI自作教室」

 AIの初心者向け本「からあげ先生のとにかく楽しいAI自作教室」を執筆しました。Google Colaboratoryという環境構築不要のGoogleの無料のWebサービスを使って、実際に動かしながらAIを学べる本になっています。

 文系でAI素人の私の妻も、実践できて理解を深められるような、初学者向けの内容になっています。以下に紹介記事を書いていますので、興味ある方は是非ごらんください。

参考リンク

Pythonを書き始める前に見るべきTips - Qiita
上記の記事は、この記事の数倍丁寧です。セットアップも私のを邪道とするとこちらの記事は王道です(多分)。ただ、必ずしも正しいのが最適と限らないのが環境設定の難しいところですね。目的に合わせて選択下さい。

関連記事

変更履歴

  • 2020/12/20 AI関係本の執筆に関して追記
  • 2020/10/14 Python 3.7系インストールの注意事項追記
  • 2019/02/02 関連記事の追記
  • 2018/05/17 Linuxの場合のbashrcに対する設定不足追記
  • 2017/12/18 Jupyter notebook関係のリンクを追加