$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

pyenv + venvでPython3環境を構築する

機械学習のモチベーションを上げるためにTensorFlowを触ろうとしている。まずは環境設定でしょうということで、ひとまずPython3環境を作る。今はpyenv + venvで作るのが良いみたいなので、それでやってみたメモ。

pyenvでpythonをインストールする

pyenvが必要かどうかフローチャート - Qiita も参考にしたのだけど、まあ細かくPythonのversionを指定したくなる時もありそうだし、とりあえずpyenvを入れておく。

自分は anyenv を使っているので、それでpyenvをインストール。

$ anyenv install pyenv

次にpyenvでpython 3.6.1をインストール。

$ pyenv install 3.6.1
$ pyenv versions
  system
* 3.6.1 (set by /Users/shibayu36/.anyenv/envs/pyenv/version)

これでOK。

venvで環境を作る

pythonで、bundlerやnpmみたいにあるディレクトリ配下の環境を作りたい場合、virtualenv というのを使うと良いみたい。また今はpython標準でvenvという名前でvirtualenvが取り込まれたので、それを利用してみる。

環境の用意

まずTensorFlowを試すことを見越して、tensorflow-playgroundというディレクトリで環境を作ってみる。

$ mkdir tensorflow-playground
$ cd tensorflow-playground
$ python3.6 -m venv .

これでこのディレクトリ配下にbinincludeなどのディレクトリが出来たので、用意完了。

環境に入る

それでこの環境で作業したいときは、以下のコマンドを実行する。

$ source bin/activate

するとプロンプトに以下のように環境名が表示される。これでこの環境内で作業が出来るようになる。

(tensorflow-playground) $

環境から出る

deactivateすれば出れる。

$ deactivate

プロンプトから(tensorflow-playground)の表示が消えたらOK。

実際にvenvの環境下でtensorflowをインストールしてみる

あとはうまくいっているか確認。tensorflowをインストールしてみる。https://www.tensorflow.org/install/install_mac

$ source bin/activate
$ pip install --upgrade tensorflow
$ ls lib/python3.6/site-packages/

するとこのディレクトリのlib/python3.6/site-packages/にそれっぽいファイルがインストールされたのでうまくいってそう!ディレクトリ配下にインストールされる形式なので、npmの環境構築と似てますね。

まとめ

今回はTensorFlowを触る前準備として、まずは最近のpython環境について調べて、環境を用意してみた。

毎回何かを触るときにはその前段階でいろいろやっちゃうことが多い。たぶんこれからEmacsの設定が待っている。まあ楽しいからいいんだけど。

mysqlenvの管理配下にデバッグオプション付きのMySQLをインストールする

【2022/09/09追記】もっと簡単な方法があったみたい!

最近アルゴリズムの勉強をしていて、MySQLの挙動を追う機会があった。そこでMySQLデバッグを出来るようにと、MySQL :: MySQL 5.6 リファレンスマニュアル :: 24.4.1.1 デバッグのための MySQL のコンパイル に書いてあるように、MySQLデバッグオプション付きでコンパイルしてインストールしたかった。

また、自分はmysqlenvを普段使っているので、mysqlenvでデバッグオプションがついたMySQLにすぐに切り替えられるようにもしておきたい。

ただ一つ問題があった。それはmysqlenv installコマンドにはデバッグ付きでインストールできる方法がないことだった。

そこでmysqlenvの管理配下にデバッグオプション付きのMySQLをインストールする方法が何かないか試したのでメモ。

mysqlenvが裏側で何を使っているか

以下のコマンドを実行してみたら結局は裏側はmysql-buildであるということが分かる。

$ mysqlenv install --as 5.6.35-debug 5.6.35
run: mysql-build 5.6.35 /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debug

mysql-buildのオプションを調べる

$ mysql-build --help
mysql-build, Compile and Install MySQL
usage: mysql-build [-v|--verbose] [--with-debug] [--sudo] definition prefix [plugin[,...]]
       mysql-build --definitions
       mysql-build --plugins

  -v/--verbose     Verbose mode: print compilation status to stdout
  --with-debug     Debug build
  --definitions    List all built-in definitions
  --plugins        List all built-in plugins
  --sudo           Run install as superuser

正に必要な--with-debugオプションがあった。しかしmysqlenvからこのオプションを渡す方法はコードを見る限りなさそうだった。

mysql-buildで直接mysqlenvの管理配下にインストールする

mysql-build 5.6.35 /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debugをよく見ると、結局はmysqlenvは~/.mysqlenv/mysqls/以下にmysql-buildでインストールしているだけである。そこで以下のコマンドを実行すればmysqlenvの管理配下にインストールできる。

$ mysql-build --with-debug 5.6.35 /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debug

mysql-install-dbを実行する

mysqlenvのコードを見てみると、mysqlenv installは自動でmysql_install_dbを発行してくれている。そこで最後にそれを実行する。

$ cd /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debug
$ find . | grep mysql_install_db
./man/man1/mysql_install_db.1
./scripts/mysql_install_db
$ ./scripts/mysql_install_db
...

mysqlenvで確認する

$ mysqlenv list
  5.5.49
* 5.6.27
  5.6.35-debug
$ mysqlenv local 5.6.35-debug
$ mysqlenv list
  5.5.49
  5.6.27
* 5.6.35-debug
$ mysql --help
# --debugオプションがあれば成功

ということで成功してそう。実際にdebugオプションで起動はまだしていないので、もうちょっと確認する必要はあるが...

まとめ

今回はmysqlenvの管理配下にデバッグオプション付きのMySQLをインストールする方法についてメモしておいた。

Coursera Machine Learning Week1を受けた & メモ

自分の中で裏側よりの難しいタスクをアサインされる機会を増やしたいと思い、機械学習の勉強を始めることにした。そこでとりあえず良いとよく言われているCoursera Machine Learningの講義を受けることにした。

https://www.coursera.org/learn/machine-learning

ひとまずWeek1を終わらせたので、受けたときにとったメモを置いておく。

Introduction

機械学習とはどのようなところに使われるかと、教師あり学習学習・教師なし学習について少し触れるような内容だった。

教師あり学習

  • ラベル付きデータを与えて学習するもの
  • 教師あり学習の中に、回帰問題と分類問題がある
    • 回帰問題 -> 連続値出力の予測
    • 分類問題 -> 離散値出力の予測
  • 例1: 家の値段を予測する -> 回帰問題
  • 例2: 乳がんを良性か悪性か判定する -> 分類問題

教師なし学習

  • 教師なし学習とは、ラベルを与えられていないデータ集合を、分類するもの(?)
    • Wikipediaによると、「データの背後に存在する本質的な構造を抽出するために用いられる」らしい
  • 例1: マーケティングのセグメントを自動的に分類する
  • 例2: 二つの音声(人とか環境音とか)を分離する -> カクテルパーティ問題

Model and Cost Function

線形回帰モデルをどのように構築するかについて紹介する内容だった。一つずつ単純化して説明してから複雑なものを考えるという形式をとって説明してくれるので非常に分かりやすかった。

線形回帰モデル

  • 線形回帰問題とは、訓練データで学習することで、予測するための関数hを得ることが目的となる
  • ひとまず{h_\theta(x) = \theta_0 + \theta_1 * x}というモデルを考える
  • hが1次関数であるものを線形回帰モデル、もしくは単回帰モデルと呼ぶ

Cost Function(目的関数)

  • Cost Functionを利用することで、h(x)を算出できる
  • Cost Functionは以下のように二乗誤差の平均と考える
    • {J(\theta_0, \theta_1) = \dfrac {1}{2m} \displaystyle \sum {i=1}^m \left ( \hat{y}{i}- y_{i} \right)^2 = \dfrac {1}{2m} \displaystyle \sum {i=1}^m \left (h\theta (x_{i}) - y_{i} \right)^2}
  • Cost Functionが最小になればデータセットに近い直線が得られ、関数hのための{\theta_0}{\theta_1}が分かる
  • 等高線のような図解が分かりやすかった

Parameter Learning

Gradient Descent(最急降下法)について習う。

  • 最急降下法は、関数の傾きを利用して最小に近づけていく方法
  • αという学習率というパラメータを用いて最小に近づけていく
  • 最急降下法では、初期値によって局所解というものにたどり着いてしまい、最適な解が得られないことがある
  • 線形回帰の問題であれば、局所解は存在せず、ただ一つ解が存在することになる

最急降下法アルゴリズム
{\begin{align*} \text{repeat until convergence: } \lbrace & \newline \theta_0 := & \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}(h_\theta(x_{i}) - y_{i}) \newline \theta_1 := & \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}\left((h_\theta(x_{i}) - y_{i}) x_{i}\right) \newline \rbrace& \end{align*}}

Linear Algebra Review

線形代数の基礎中の基礎として、行列演算について教えてもらえる。

  • 関数適用を行列とベクトルの掛け算として見るのが面白い
  • 複数の関数適用なら行列と行列の掛け算と見る

まとめ

Week1を受けての感想は、非常に分かりやすく解説されているということ。説明がうますぎて、一切前提知識がなくても理解することが出来た。

数学的な知識も今の段階では分かっていなくとも理解することが出来た。どこかで数学の知識がないことで詰まってしまったら、またその機会に学習したい。

専門用語も多いので英語だとかなり理解に苦しむが、日本語の字幕も用意されていたので特に問題はなかった。たまに日本語の字幕がずれていて一切わからないところがあったので、そこは諦めて気合で英語の字幕を見ると良い。

とりあえず受けてみたものの、どのくらいモチベーションを保って続けられるかわからない。とりあえずTensorFlowとかに触ってみるというのを先にやっても良いのかもと思った。