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 'eval "$(pyenv init -)"' >> ~/.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の仮想環境を作りましょう。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

 上記で何をしているか詳しく知りたい方は、以下記事を参照ください。

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

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

  • 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

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

 例えば、以下で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』 - プロクラシスト

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

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

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)

 Raspberry Piと書いてありますが、Macでも普通に動きますので興味あれば試してみて下さい。

まとめ

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

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

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

  • 作者: Andreas C. Muller,Sarah Guido,中田秀基
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/05/25
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

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

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

参考記事

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