機械学習についての勉強をした
突然だけど先日Cousera(オンライン講義を受けれる営利団体)の機械学習に関するオンライン講義を受講し終えた (修了証はこちら)。
Neural Networkのアルゴリズムをプログラム言語で直書きしたり、「知ってるだけ」という手法の中身を一歩一歩丁寧に記述することも含めながら学習する機会ができてとてもよかった。
Main topicとしては:教師あり学習 (回帰、NN、SVM)、教師なし学習(k平均法、PCA、異常検知)、その他実装例の紹介やシステム構築上のtipsを学べる。興味がある人はぜひ受講して「シリコンバレーの中でも限られた機械学習を理解し実装可能な人材」を目指そう。
Octaveの仮想環境
さて本題。上述の講義では「Octave(or MATLAB)を用いた学習」が求められる。Dockerを習ったばかりだったのでせっかくなら「受講中はDockerでOctave環境を構築して、終わったらポイしよう!」というモチベーションのもとここを参考にJupyter Notebook+Octave環境をDockerで作ることにした。
Jupyter notebookとは:ブラウザで動作するインタラクティブなデータ分析用ツール
Octaveとは:無償のMATLAB(プログラミング言語)
作り方
任意のフォルダ上で以下のDockerfileを作る (e.g., VScodeで立ち上げるならコマンドプロンプトで任意のフォルダ上で”code Dockerfile”と入力)。
# Imageの作成
FROM jupyter/base-notebook
# metadataの記述
LABEL Description="Jupyter Octave"
# RUNさせるための権限付与 + 作図用のgnuplotとOctaveをインスコ
USER root
RUN apt-get update && \
apt-get install -y gnuplot octave && \
apt-get clean
# pipでOctaveのカーネルとOctave用のJupyter kernelをインスコ
USER jovyan
RUN pip install octave_kernel && \
export OCTAVE_EXECUTABLE=$(which octave)
このDockerfileができたら準備完了です。
Docker imageの作成
コマンドプロンプト上で以下のように入力
docker build -t jupyter_octave:1.0 .
“-t”でお名前とVersion情報をつけてます。一番最後の” .”も「今いるフォルダ」を意味しているので忘れない!
RUNする
コマンドプロンプト上で以下のように入力する必要があります
docker container run --rm -p 8888:8888 --user root -e NB_GID=100 -v "$$PWD/work:/home/jovyan/work" -it --name jupyter_octave jupyter_octave:1.0
ぱっと見でわかるとおもうんですけどこれがくそ長い。
Octave環境を立ち上げるためにいちいちこんな長いの入力するのも嫌なので「Makefile」を活用します。
(e.g., VScodeなら「code Makefile」とか)
中身は以下のように作る
serve:
@docker container run --rm \
-p 8888:8888 \
--user root \
-e NB_GID=100 \
-v "$$PWD/work:/home/jovyan/work" \
-it --name jupyter_octave jupyter_octave:1.0 \
※なんか理由がわからないんですけどぼくの環境だと@がうまく機能しなかったりするんでTabを消したりつけたりしてみてください
以下に簡単なメモを残しときます。
“–rm”=コンテナ終了時に環境の自動消去 (fileは以下のマウントフォルダに残る)
“-p”=コンテナport:host port
“-e”=環境変数のセット。詳細はこちら
“-v”=ローカルで使うフォルダ:コンテナ上のフォルダ+Windowsだと書き方がターミナルによって異なる(例:Docker Quickstart= -v ${PWD}:/app GitBash= -v “/$(PWD)”://app PowerShell=-v /c/Users/username/projectname:/app)。困ったら絶対パスで書くのだ。
あとはまぁいいでしょ。
Makefileができたら、毎回コマンドプロンプト上で
make serve
と入力してうまくいけば
http://127.0.0.1:8888/?token=めっちゃながいしこのリンクの先にはなにもない
みたいなんが出てくる。これをブラウザにコピペしたらJupyter notebookでOctave環境の完成!これで毎週のCouseraでのプログラミング課題をJupyter notebook上のOctaveでできる。やったね!
うまくいかんかったらTwitterで聞いて下せえ(解決できるとはいっていない)