機械学習を1ヵ月で実践レベルにする #1 (とっかかり編)

# はじめに
[会社](http://www.uzabase.com/)から1ヵ月の自由研究期間を頂いたので、かねてより興味のあった機械学習の勉強を始めました。せっかくなので学習の記録をつけていこうと思います。1日目の今日は、機械学習を学ぶ上での文献や、学び方へのまとまりのないリファレンスとなりました。

## 過去記事一覧
* [1日目 とっかかり編](http://qiita.com/junichiro/items/ee50af10df77d52cd432)
* [2日目 オンライン講座](http://qiita.com/junichiro/items/7a5b95d7122176e94fe0)
* [3日目 Octave チュートリアル](http://qiita.com/junichiro/items/33954f08411e33d33506)
* [4日目 機械学習の第一歩、線形回帰から](http://qiita.com/junichiro/items/d4dc67bdebb9fccb7ef5)
* [5日目 線形回帰をOctave で実装する](http://qiita.com/junichiro/items/1a4b87e99b471cf5bea1)
* [6日目 Octave によるVectorial implementation](http://qiita.com/junichiro/items/7972b1b6ad3d087fbde0)
* [7日目 ロジスティック回帰 (分類問題) その1](http://qiita.com/junichiro/items/8de94c84c35e9851d42a)
* [8日目 ロジスティック回帰 (分類問題) その2](http://qiita.com/junichiro/items/5d20a40a3a282af422a3)
* [9日目 オーバーフィッティング](http://qiita.com/junichiro/items/4d2c91128c9bd850f580)
* [10日目 正規化](http://qiita.com/junichiro/items/8b1867201663c5af38a4)
* [11日目 ニューラルネットワーク #1] (http://qiita.com/junichiro/items/7794cedf834a4f6ef52c)
* [12日目 ニューラルネットワーク #2] (http://qiita.com/junichiro/items/b522ea41c02f90d23aa5)
* [13日目 機械学習に必要な最急降下法の実装に必要な知識まとめ](http://qiita.com/junichiro/items/527b1f211ed814528ded)
* [14日目 機械学習で精度が出ない時にやることまとめ](http://qiita.com/junichiro/items/7e2842c7afba2407c49b)
* [最終日 機械学習をゼロから1ヵ月間勉強し続けた結果](http://qiita.com/junichiro/items/3457e33e502086a200f1)

# ゴール設定
1ヵ月後のゴールを以下のように定めました。

1. 新たな課題に対して機械学習的アプローチで解決策を提案できるようになる。
2. 人が手でやっていた作業をコンピュータ作業に置き換える提案ができるようになる。
3. 提案したものを実践する、または実践できるプロジェクトをおこす。
4. 実際にある課題のうち簡単なものを解決し、自由研究の成果とする。

# 事前準備
まず、この短い1ヵ月を有意義に過ごすために、自由研究期間にはいる前から、助走代わりにいくつか書籍を用意しておきました。

## 買っておいた本(読んでない)
* [ビジネスに活かすデータマイニング]()
    * 同僚が社内LTのたびに持ち出す良書
    * 理論と実践を行き来したいので、実践パートで読みたいです
    * (理論好きですけど、理論だけですと疲れますし飽きますから)
* [はじめてのパターン認識](http://amzn.to/2hvvr3G)
    * こちらも機械学習の実践例のひとつとして
* [データ解析のための統計モデリング入門](http://amzn.to/2hrWWxz)
    * 通称「みどりぼん」
    * 統計学の知識としてこれを入れておくといいとのことです。
* [自然言語処理 (放送大学教材)](http://amzn.to/2gK4bjb)
    * 想定している課題のうちいくつかは明らかに自然言語の知識を必要とするので
* [深層学習 (機械学習プロフェッショナルシリーズ)](http://amzn.to/2gK0Uk1)
    * どうせやるならディープラーニングまで行きたいですよね。
    * 個人的に囲碁やポーカーが好きなので、そっちに応用できると嬉しいです。
    * 興味枠。

## 買って、読んだ本
* [戦略的データサイエンス入門](http://amzn.to/2htP5wB) 
    * データサイエンスとはなにか
    * なにができてなにができないのか
    * データサイエンスの有用性
    * 最初に読んでおくと、勉強前のテンションがあがります！
    * (これ読んでテンションあがらなければ向いていないです。)
    * それを判定する意味でも読んでおくといいです。
* [集合知プログラミング](http://amzn.to/2hM2LCj)
    * 読んだのはもう8年も前なので復習したいです。
    * 当時はこれを読むためにPython を始めたくらいです。
    * 今回は目次だけ一通り再確認しました。
* [ITエンジニアのための機械学習理論入門](http://amzn.to/2gJUxwI)
    * タイトルまま。機械学習の理論を広く浅く学べました。
    * 読書メモがそのままこれからの学習のリンクリストになりました。
    * ツールもたくさん紹介されているので、実践もしやすいです。
    * この記事の付録として読書メモを最後にまとめておきます。

# いよいよ自由研究スタート
そして、1日目に当たる今日は、どういう筋道で学習していくかを決めるため、さらにランダムにいろいろなサイト、スライドを見まくりました。

## 見たスライド
* [機械学習入門以前](http://www.slideshare.net/mrtc0/machine-learning-41005650)
* [機械学習によるデータ分析まわりのお話](http://www.slideshare.net/canard0328/ss-44288984)
* [機械学習チュートリアル](http://www.slideshare.net/unnonouno/jubatus-casual-talks)
* [サポートベクターマシン入門](http://www.slideshare.net/tojimat/tokyor-41)
* [scikit-learnを用いた機械学習チュートリアル](http://www.slideshare.net/AtsushiKanaya/scikitlearn)
* [Deep Learning](http://www.slideshare.net/kazoo04/deep-learning-15097274)

## 見たサイト
* [機械学習はじめの一歩に役立つ記事のまとめ](http://qiita.com/shu223/items/9cbde46c0690f1952750)
* [今年から機械学習を学び始めてやったこと、Machine Learning Nowでやりたいこと](http://www.yoheim.net/blog.php?q=20151201)
* [機械学習をこれから始める人に押さえておいてほしいこと](http://qiita.com/IshitaTakeshi/items/4607d9f729babd273960)
* [機械学習のPythonとの出会い](http://www.kamishima.net/mlmpyja/)
* [機械学習初心者が『Python 機械学習プログラミング』（速習コース）を読んだメモ](http://muziyoshiz.hatenablog.com/entry/2016/09/24/125122)

## Stanford University の機械学習オンライン講座
[Machine Learning - Stanford University | Coursera](https://www.coursera.org/learn/machine-learning)

### WEEK 1 を終えました
* 機械学習分野はとにかく需要がある！
* 機械学習は大きく分けて「教師あり学習と教師なし学習」にわけられる
  * (僕が興味あるのは、とりあえず教師あり学習のほう)
* 教師あり学習とはつまり正しい答えが与えれているもの。
* 特徴のリストは無限の長さにもなり得るがそれに対応できるアルゴリズムがある。
* 回帰問題 => 連続値出力の予測
* 分類問題 => 離散値出力の予測
* 機械学習を学ぶときに使う言語はOctave 一択！
  * 過去の実績でOctave を使うと、機械学習の習得が最速
  * Python よりも。
  * Python いろいろ準備しようとしてたのに...
* WEEK 1 を終えての感想
  * 1WEEK あたり3時間くらい。
  * スケジュール通りやると3月くらいまでかかる
  * がんばれば午前に1WEEK、午後にもう1WEEK進められそう
  * 内容は「IT エンジニアのための機械学習理論入門」と似ている
  * ただ、よりゆっくりかつ詳しく説明してくれるので理解しやすい

明日からはこちらの、Stanford の機械学習講座をやります。WEEK 11 まであるようで、午前と午後にひとつずつやっても1週間で終わるので、クリスマス前にはこの講座を終了して肌感をつかみたいと思います。

それから、手を動かそうとしたときに本質的でないところでつまづいたり時間をとられたりして、コンテキストスイッチされても嫌なので、Python における機械学習環境を見直して、最強の環境も明日作ります。と思っていたのですが、Octave の環境も作っておかないとですね。

# 明日やること
* [Machine Learning - Stanford University | Coursera](https://www.coursera.org/learn/machine-learning) 
  * これの WEEK 2, WEEK 3
  * (↑これだけで6時間消費する...)
* Octave の環境づくり
* Python の機械学習環境見直し(or 再構築)
  * pyenv / virtualenv
  * anaconda
  * [IPython](https://ipython.org/)
  * [Jupyter](http://jupyter.org/)
  * [NumPy](http://www.numpy.org/)
  * [pandas](http://pandas.pydata.org/)
  * [SciPy](https://www.scipy.org/)
  * [matplotlib](http://matplotlib.org/)
  * [PIL(Python Image Library)](http://www.pythonware.com/products/pil/)
  * [scikit-learn](http://scikit-learn.org/stable/)

# 付録

## 機械学習理論入門読書メモ
### 概要
[IT エンジニアのための機械学習理論入門](http://amzn.to/2gJUxwI)
技術評論社
中井悦司

### 機械学習アルゴリズムの分類
* 分類：クラス判定を生み出すアルゴリズム
* 回帰分析：数値を予測するアルゴリズム
* クラスタリング：教師なしのグループ化を行うアルゴリズム
* その他(扱わない)
    * 類似マッチング
    * 共起分析
    * リンク予測

### 復習用語
* 最小二乗法
    * トレーニングセット、特徴変数、目的変数
    * 多項式近似、誤差関数
    * オーバーフィッティング問題
* 最尤推定法
    * データ発生確率の設定
    * パラメータ評価(確率を最大化するパラメータ)
    * 推定量の評価(一致正と普遍性)
* パーセプトロン
    * 平面を分割する直線の方程式
    * 誤差関数による分類結果の評価
    * 確率的勾配降下法 -> 勾配ベクトルによるパラメータの修正
    * 幾何学的な解釈
        * バイアス項の任意性とアルゴリズムの収束速度
        * 幾何学的解釈 / バイアス項の幾何学的な意味
* ロジスティック回帰
    * データ発生確率の定義
    * 最尤推定法によるパラメータの決定
* ROC曲線
    * ロジスティック回帰の現実問題への適用
    * ROC曲線による性能評価
    * IRLS法
* k平均法(means?)
    * 教師なし学習モデルの基礎
* EMアルゴリズム
    * 最尤推定法による教師なし学習モデル
    * ベルヌイ分布
    * ベルヌイ混合分布
    * EMアルゴリズムによるクラスタリング
* ベイズ推定
    * ベイズの定理
    * ベイズ推定の回帰分析への応用

### 復習分析ツール
* [NumPy](http://www.numpy.org/)
* [SciPy](https://www.scipy.org/)
* [matplotlib](http://matplotlib.org/)
* [pandas](http://pandas.pydata.org/)
* [PIL(Python Image Library)](http://www.pythonware.com/products/pil/)
* [scikit-learn](http://scikit-learn.org/stable/)
* [IPython](https://ipython.org/)
* [Jupyter](http://jupyter.org/)
* [Theano](http://www.deeplearning.net/software/theano/)

### さらなる参考書籍
* [戦略的データサイエンス入門](http://amzn.to/2htP5wB) -> 持ってるオライリーのやつ
* [パターン認識と機械学習](http://amzn.to/2hvy9pE) -> 次に読むべき本
* [データ解析のための統計モデリング入門](http://amzn.to/2hrWWxz) 久保拓弥 岩波書店 -> 買った
* [Python によるデータ分析入門](http://amzn.to/2hvmfMH) -> 図書館にあった