
こんにちは。takapy(@takapy0210)です。
今日はDockerで機械学習の環境を作成したのでそれの備忘です。
はじめに
機械学習に限らず、PCを使って何かしら(プログラミングなど)を学びたいと思った時に、最初に躓きやすいのが環境構築です。
環境構築で1日潰れてしまった・・・というのはまだマシな方で、環境構築ができなくて勉強そのもの自体を諦めてしまったという話もよく耳にします。
本記事は機械学習を勉強し始めたい方に対して、環境構築の手間を最小限にとどめ、勉強に必要なエネルギーを必要な部分にぶちこめるようにすることを目的としています。
(Dockerについての詳細はリンクを掲載させていただくことで割愛しております)
できること
下記ライブラリを使用できる機械学習環境が、数行のコマンドを実行するだけで構築できます!
pipでインストールできないライブラリ達も結構あり、ローカルで環境構築しようとすると結構大変なのですが、Dockerを使うことでそんな煩わしさから解放されます。とても簡単。Dockerすごい!
| ライブラリ | 説明 |
|---|---|
| Python 3.6 | Python3.6実行環境 |
| TensorFlow | ニューラルネットワークライブラリ |
| keras | TensorFlowやTheanoで実行できるニューラルネットワークライブラリ |
| Pytorch | ニューラルネットワークライブラリ |
| LightGBM | Gradient Boosting 機械学習ライブラリ |
| xgboost | Gradient Boosting 機械学習ライブラリ |
| Catboost | Gradient Boosting 機械学習ライブラリ |
| scikit-learn | 機械学習ライブラリ |
| jupyter | 対話型Python実行環境 |
| scipy | 科学計算用ライブラリ |
| simpy | 離散シミュレーションライブラリ |
| matplotlib | グラフ描画ライブラリ |
| japanize-matplotlib | matplotlibの日本語対応ライブラリ |
| numpy | 数値計算ライブラリ(ベクトル/行列計算など) |
| pandas | データ解析ライブラリ |
| plotly | オシャレなグラフ描画ライブラリ |
| seaborn | オシャレなグラフ描画ライブラリ |
| sympy | 符号数学ライブラリ |
| mecab-python3 | 形態素解析エンジン(mecab-ipadic-neologd対応済) |
| gensim | トピックモデリング用ライブラリ |
| nltk | 自然言語処理・テキストマイニングライブラリ |
| WordCloud | テキスト可視化用ライブラリ |
| librosa | 音声信号処理ライブラリ |
| Pillow | 画像処理ライブラリ |
| cv | 画像処理ライブラリ |
| h5py | HDF5 フォーマットファイル |
| BeautifulSoup | Webスクレイピングライブラリ |
などなど・・・詳しくは後述しているDockerfileをご参照ください。
Dockerって何
下記が詳しいです。
Dockerのインストール
googleで検索していただけば、有識者の記事が見つかると思いますので割愛させていただきます。
または下記を参照ください。(下記記事はMacでのインストール手順を記載しております)
環境構築方法
Dockerのインストール&起動が終了していることを前提としています。
実質下記2ステップ(2行のコマンドのみ)のみで環境構築が終了します。(所要時間30分程度)
- Dockerイメージのpull
$ docker pull takapy0210/machine-learning-python3
- コンテナ起動
$ docker run -it --rm -v $(pwd):/notebooks -p 8888:8888 takapy0210/machine-learning-python3
少し詳しくみていきます。
Dockerイメージのpull
下記コマンドでdockerイメージをpullし、イメージをローカルPCに持ってきてください。
$ docker pull takapy0210/machine-learning-python3
pullできたか確認してみます。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE takapy0210/machine-learning-python3 latest 699e8fb72271 About an hour ago 6.37GB
上記のように表示されていれば、無事にpullできています。
コンテナの起動
下記コマンドでコンテナを起動します。
-v $(pwd):/notebooksの部分は、ローカルディレクトリ:dockerディレクトリの対応で、指定したローカルディレクトリをdocker上にマウントすることができるオプションです。$(pwd)と指定することで、docker runコマンドを実行したローカルのディレクトリをマウントできます。
$ docker run -it --rm -v $(pwd):/notebooks -p 8888:8888 takapy0210/machine-learning-python3
そうすると、下記のようなメッセージが表示されます。
[I 02:43:35.525 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret [I 02:43:36.530 NotebookApp] Serving notebooks from local directory: /notebooks [I 02:43:36.530 NotebookApp] The Jupyter Notebook is running at: [I 02:43:36.530 NotebookApp] http://(ef5758812c93 or 127.0.0.1):8888/?token=28c6e1fa668e5bd1f9b2ef4463821bc28b14fXXe860f0b60
ブラウザでhttp://localhost:8888にアクセスし、表示されるページに上記で出力されるtokenを入力してLog inしてください。
(上記の例だと28c6e1fa668e5bd1f9b2ef4463821bc28b14fXXe860f0b60の部分)

するとjupyter notebookが起動します。

jupyter notebookを起動せずに、シェルへログインした状態でコンテナを起動することもできます。
$ docker run -it --rm takapy0210/machine-learning-python3 bash
以上で冒頭で述べたライブラリ達が使用できる環境を構築することができました!!!簡単!
補足
mecab-ipadic-neologdの使用方法
import MeCab sentence = "8月3日に放送された「中居正広の金曜日のスマイルたちへ」(TBS系)で、1日たった5分でぽっこりおなかを解消するというダイエット方法を紹介。キンタロー。にも密着。" # 標準 mecab = MeCab.Tagger('') print(mecab.parse(sentence)) # mecab-ipadic-neologd使用 mecab = MeCab.Tagger ('-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd') print(mecab.parse(sentence))
出力結果
# 標準
8月 名詞,副詞可能,*,*,*,*,8月,ハチガツ,ハチガツ,,
3 名詞,数,*,*,*,*,3,サン,サン,,
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ,,
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
放送 名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー,,
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ,,
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ,,
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ,,
「 記号,括弧開,*,*,*,*,「,「,「,,
中居 名詞,固有名詞,人名,姓,*,*,中居,ナカイ,ナカイ,,
正広 名詞,固有名詞,人名,名,*,*,正広,マサヒロ,マサヒロ,,
の 助詞,連体化,*,*,*,*,の,ノ,ノ,,
金曜日 名詞,副詞可能,*,*,*,*,金曜日,キンヨウビ,キンヨービ,,
の 助詞,連体化,*,*,*,*,の,ノ,ノ,,
スマイル 名詞,一般,*,*,*,*,スマイル,スマイル,スマイル,,
たち 名詞,接尾,一般,*,*,*,たち,タチ,タチ,,
へ 助詞,格助詞,一般,*,*,*,へ,ヘ,エ,,
」 記号,括弧閉,*,*,*,*,」,」,」,,
( 記号,括弧開,*,*,*,*,"(","(","(",,
TBS 名詞,固有名詞,組織,*,*,*,*
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ,,
) 記号,括弧閉,*,*,*,*,")",")",")",,
で 助詞,格助詞,一般,*,*,*,で,デ,デ,,
、 記号,読点,*,*,*,*,、,、,、,,
1 名詞,数,*,*,*,*,1,イチ,イチ,,
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ,,
たった 副詞,助詞類接続,*,*,*,*,たった,タッタ,タッタ,,
5 名詞,数,*,*,*,*,5,ゴ,ゴ,,
分 名詞,接尾,助数詞,*,*,*,分,フン,フン,,
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ,,
ぽ 形容詞,接尾,*,*,形容詞・アウオ段,ガル接続,ぽい,ポ,ポ,,
っ 動詞,非自立,*,*,五段・カ行促音便,連用タ接続,く,ッ,ッ,,
こり 動詞,自立,*,*,一段,連用形,こりる,コリ,コリ,こり/懲/懲り,
おなか 名詞,一般,*,*,*,*,おなか,オナカ,オナカ,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
解消 名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー,,
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル,,
という 助詞,格助詞,連語,*,*,*,という,トイウ,トユウ,,
ダイエット 名詞,サ変接続,*,*,*,*,ダイエット,ダイエット,ダイエット,,
方法 名詞,一般,*,*,*,*,方法,ホウホウ,ホーホー,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
紹介 名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ,,
。 記号,句点,*,*,*,*,。,。,。,,
キンタロー 名詞,一般,*,*,*,*,*
。 記号,句点,*,*,*,*,。,。,。,,
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ,,
も 助詞,係助詞,*,*,*,*,も,モ,モ,,
密着 名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク,,
。 記号,句点,*,*,*,*,。,。,。,,
==========================
# mecab-ipadic-neologd使用
8月3日 名詞,固有名詞,一般,*,*,*,8月3日,ハチガツミッカ,ハチガツミッカ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
放送 名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
「 記号,括弧開,*,*,*,*,「,「,「
中居正広の金曜日のスマイルたちへ 名詞,固有名詞,一般,*,*,*,中居正広の金曜日のスマイルたちへ,ナカイマサヒロノキンヨウビノスマイルタチヘ,ナカイマサヒロノキンヨービノスマイルタチヘ
」( 記号,一般,*,*,*,*,*
TBS 名詞,固有名詞,一般,*,*,*,TBS,ティービーエス,ティービーエス
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ
) 記号,一般,*,*,*,*,*
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
、 記号,読点,*,*,*,*,、,、,、
1日 名詞,固有名詞,一般,*,*,*,1日,ツイタチ,ツイタチ
たった 副詞,助詞類接続,*,*,*,*,たった,タッタ,タッタ
5分 名詞,固有名詞,一般,*,*,*,5分,ゴフン,ゴフン
で 助詞,格助詞,一般,*,*,*,で,デ,デ
ぽっこり 副詞,一般,*,*,*,*,ぽっこり,ポッコリ,ポッコリ
おなか 名詞,一般,*,*,*,*,おなか,オナカ,オナカ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解消 名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
という 助詞,格助詞,連語,*,*,*,という,トイウ,トユウ
ダイエット方法 名詞,固有名詞,一般,*,*,*,ダイエット方法,ダイエットホウホウ,ダイエットホウホー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
紹介 名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ
。 記号,句点,*,*,*,*,。,。,。
キンタロー。 名詞,固有名詞,一般,*,*,*,キンタロー。,キンタロー,キンタロー
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
も 助詞,係助詞,*,*,*,*,も,モ,モ
密着 名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク
。 記号,句点,*,*,*,*,。,。,。
中居正広の金曜日のスマイルたちへという比較的新しい単語を識別できていることが分かります。
Dockerfile
GitHubにあげておりますので、適当にcloneするなりカスタマイズするなりしてご利用ください。
最後に
ステキな機械学習ライフをお過ごしください!!