Coursera 機械学習コースの全用語を3行でまとめてみた


## 概要

年末休暇を利用して、Courseraの機械学習コースを[修了](https://www.coursera.org/account/accomplishments/certificate/ZPU9E9KA9BBV)しました。

機械学習は興味だけはあって、なかなか後回しにしていたのですが、[Life 3.0](https://github.com/okmttdhr/life-3.0)という本を読んで、これはやらないとだめだ、と思い、どうやって学習を始めたら良いかを探していたところ、Courseraの機械学習コースが見つかりました。

コース概要については以下が詳しいのでご覧ください。

- [数学の苦手なバイオの学生がCourseraの機械学習コースを修了して気づいたこと - Qiita](https://qiita.com/katsu1110/items/423fc9ac567710a1bd9b)
- [例の機械学習コースが良いらしいと知りながらも2年間スルーし続けたがやはり良かったという話 - Qiita](https://qiita.com/shu223/items/9e3a50e092c2997fe6d2)

まだまだ遠い道のりですが、機械学習に関しての基礎理論は学べたかなと考えています。個人的には、物理が好きなので、界隈に物理学の人がちらほらいるのは嬉しいです。

コースの内容については他の方も述べているので、今回は、コースで学んだ重要な用語や概念、アルゴリズムなどを、復習も兼ねて、1-3行でまとめてみます(タイトル釣りスミマセン)。コースの内容を一通り網羅しているので、具体的にどのようなことを学ぶことができるかもわかるかなと思います。


## 機械学習全般

用語|日本語|内容|
---|---|---
Machine Learning|機械学習|明示的なプログラミングをせず、コンピューターに学習能力を持たせる学問。
Cost Function|目的関数|仮定関数がどの程度誤差なくデータにフィットしているかを計算する。
Training Set|訓練データ|機械学習モデルを生成するための入力データ。一般的には全体の60%程度。
Test Set|評価データ|機械学習モデルを評価するためのデータ。一般的には全体の20%程度。
Cross Validation Set|交差検証データ|Training Set、Test Setとは別に、機械学習モデルの精度を検証するためのデータ。一般的には全体の20%程度。
Overfitting(= High variance)|過学習|手持ちのデータセットを100%近い精度で予測しているが、そのモデルがあまりにも手持ちのデータセットの予測に特化しているため、新しいデータセットの予測が困難になっていること。
Underfitting(= High bias)|未学習|機械学習モデルの誤差が高く、正しく予測ができていないこと。
Regularization|正則化|オーバーフィットを防ぐために、パラメーターの値を十分小さくして計算する手法。
Generalization Error|一般化エラー|入力データにないようなデータで予測を行う場合の誤差。Test Setにおいて精度が良くても、Generalization Errorが大きければ、モデルの一般化ができていない、のような評価ができる。
Sigmoid Function|シグモイド関数|[ ^1 ](https://qiita.com/okmttdhr/private/092ec5fc450762a73ad0#1)
Machine Learning Pipelines|機械学習パイプライン|機械学習をいくつかの工程に分けて行うこと、または、その工程をまとめたもの。
Ceiling Analysis|天井分析|機械学習パイプラインで、どの要素が最も改善できるポテンシャルがあるのか調べる手法。
Artificial Data Synthesis|人工データ合成|データの量を増やすために、元のデータを変換・合成すること。
Feature Scaling|スケーリング|それぞれ比較できないような説明変数の範囲を、一つの範囲に規格化する。
Mean Normalization|平均正規化|平均値をつかって説明変数を正規化する手法の一つ。
Decision Boundary|決定境界|データを分類する境界。
Content-based Filtering|内容ベースフィルタリング|ユーザのプロファイルや過去の嗜好情報を利用して予測を行う手法。協調フィルタリングに比べて、システムを使い始めたばかりのユーザーに対しても予測が可能であるというメリットがある。
Collaborative Filtering|協調フィルタリング|複数のユーザの嗜好情報を蓄積し、あるユーザと嗜好の類似した他のユーザの情報を利用して予測を行う手法。

## 教師あり学習

用語|日本語|内容|
---|---|---
Supervised Learning|教師あり学習|事前に与えられたデータをいわば例題とみなして、それに正解を与えるような機械学習の手法の一つ。
Regression|回帰|具体的な数値を予測する。
Classification|分類|0/1の判定や、カテゴライズを行う。
Linear Regression|線形回帰|統計学における回帰モデルの一つ。複数のインプットから、一つのアウトプットを予測する。
Polynomial Regression|多項回帰|異なる説明変数を組み合わせて新たなインプットとする回帰分析。
Logistic Regression|ロジスティック回帰|統計学における回帰モデルの一つ。アウトプットが1であるか否かの確率を予測する。
Support Vector Machine|サポートベクターマシン|現在知られている手法の中でも認識性能が優れた機械学習モデルの一つ。各データとのマージンが最大となるような決定境界を求めることで分類や回帰へ適用できる。
Kernel Method|カーネル法|元データを新しい高次元の特徴空間へ写し、非線形な分類を線形な関係式で計算する手法。カーネルとは、元データと特徴空間の内積に対応する関数のことで、特徴空間の座標を明示的に求めることなく内積を知ることができる。よくSVMと組み合わせて用いられる。
Gradient Descent(= Batch Gradient Descent)|最急降下法|関数の最小値を探索するアルゴリズムの一つ。
Normal Equation|正規方程式|最急降下法を使わずに、関数の最小値を求められる方程式。ダイレクトに解を求めることができる一方で、説明変数のサイズが大きい場合、計算に時間がかかるなどのデメリットも有る。
Conjugate Gradient/BFGS/L-BFGS|共役勾配法/BFGS法/L-BFGS法|最急降下法と比較して、より洗練されたアルゴリズムとして紹介されていた。
One-vs-all Classification|一対他分類|対象のクラスかそれ以外かというニ値分類で複数クラスへの分類を行う手法。
Precision|適合率|[ ^2 ](https://qiita.com/okmttdhr/private/092ec5fc450762a73ad0#2)
Recall|再現率|[ ^3 ](https://qiita.com/okmttdhr/private/092ec5fc450762a73ad0#3)
Accuracy|正答率|[ ^4 ](https://qiita.com/okmttdhr/private/092ec5fc450762a73ad0#4)
F Score|F値|適合率と再現率の調和平均。[ ^5 ](https://qiita.com/okmttdhr/private/092ec5fc450762a73ad0#5)

## 教師なし学習

用語|日本語|内容|
---|---|---
Unsupervised Learning|教師なし学習|データの背後に存在する本質的な構造を抽出するために用いられる機械学習の手法の一つ。
Clustering|クラスタリング|データからパターンを抽出し、複数のグループに分類する。
K-Means|K平均法|非階層型クラスタリングのアルゴリズムの一つ。K個の中心点を基準に、データとの距離が最適になるよう計算を繰り返す。
Principal Component Analysis|主成分分析|多数の変数を、全体のばらつきを最もよくあらわす変数(主成分)に合成する多変量解析の一手法。PCAを使うことで、データの特徴抽出、次元削減、多次元変数の可視化、などを行うことができる。
Anomaly Detection|異常検知|データの外れ値を検知すること、またはその手法。

## ニューラルネットワーク

用語|日本語|内容|
---|---|---
Neural Network|ニューラルネットワーク|脳機能のいくつかの特徴を真似たアルゴリズム。
layers|層/レイヤー|Neural Networkにおける処理を行う層のこと。
input layer|入力層|層のうち、最初のインプットを行うもの。
hidden layer|隠れ層|層のうち、input layerとoutput layersの間にあるもの。
output layers|出力層|層のうち、最後のアウトプットを行うもの。
units|ユニット|層を構成するノード。
activation units|活性ユニット|hidden layerにおけるノード。一つ前のレイヤーによって値が算出される。
Backpropagation|バックプロパゲーション|Neural Networkにおけるアルゴリズムの一つ。個々のニューロンの出力誤差を、出力層から前段の層へ向かって、小さくなるように計算してゆき、勾配を使用して最適な重みを求める。
Gradient Checking|Gradient Checking|Backpropagationが正しく動作しているか確かめる手法

## 大量のデータを扱う

用語|日本語|内容|
---|---|---
Stochastic Gradient Descent|確率的勾配降下法|最急降下法を大量のデータを扱う場合に改良したアルゴリズム。一度のイテレーションで、すべてのデータを使用せずに、一つのデータのみを使用することで計算量を抑えている。
Mini-Batch Gradient Descent|ミニバッチ勾配降下法|最急降下法を大量のデータを扱う場合に改良したアルゴリズム。確率的最急降下法とは違い、一度のイテレーションで、b個のデータのみを使用する。
Online Learning|オンライン学習|これまでの学習では、手持ちの訓練データをモデルに入力することを前提としていたが、オンライン学習では、データを一つづつ読み込んで、それまでの学習モデルを逐次更新してゆく。
Map-Reduce|マップリデュース|大量のデータを分割し、別のコンピュータやCPUなどのノードに振り分けて処理を並列に行う手法。


## まとめ

上記は用語のまとめとなりますが、この他にも、機械学習のプロジェクトを行う上で、次にどのような分析をすればよいか、勘や気合ではなくロジカルにアプローチする手法なども学ぶことができました。実践が考慮されていて良かったです。また、プログラミングの課題も毎週課されます。

感想としては、本当にやってよかったなという気持ちです。また、他の方も書かれていますが、`実は初心者向け` `高校数学+ググれば十分` `世界最高峰の前提知識がなくても頑張れば理解できる` `Octaveにハードルはない`などは同意できました。

ただ、それでもスタートラインに立ったレベルなので、引き続きやっていきたいなと思います。間違いがあれば編リクお願いいたします。


## 参考

- [機械学習を体系的に学ぶために何をやればいいか?がわかる記事まとめ - Qiita](https://qiita.com/okmttdhr/items/8272e33812c9c2694375)
- [数学の苦手なバイオの学生がCourseraの機械学習コースを修了して気づいたこと - Qiita](https://qiita.com/katsu1110/items/423fc9ac567710a1bd9b)
- [例の機械学習コースが良いらしいと知りながらも2年間スルーし続けたがやはり良かったという話 - Qiita](https://qiita.com/shu223/items/9e3a50e092c2997fe6d2)
- [CourseraのMachine Learningコースを修了した - @uents blog](http://uents.hatenablog.com/entry/2016/08/23/Coursera%E3%81%AEMachine_Learning%E3%82%B3%E3%83%BC%E3%82%B9%E3%82%92%E4%BF%AE%E4%BA%86%E3%81%97%E3%81%9F)
- [機械学習を1ヵ月で実践レベルにする #1 (とっかかり編) - Qiita](https://qiita.com/junichiro/items/ee50af10df77d52cd432)
- [線形回帰および識別](http://www.r.dl.itc.u-tokyo.ac.jp/~nakagawa/SML1/online-L1.pdf)
- [非階層型クラスタリング k-means - Qiita](https://qiita.com/AwaJ/items/1cd3eeef497c93a6a053)
- [機械学習で東京都の不動産の取引価格を予測する (Amazon Machine Learning)](https://blog.mmmcorp.co.jp/blog/2017/11/30/amazon-machine-learning/#%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A8%E3%81%AF)

#### ^1

```math
g(z) = \frac{1}{1 + e^{-z}}
```

#### ^2

```math
Precision = \frac{True Positive}{True Positive + False Positive}
```

#### ^3

```math
Recall = \frac{True Positive}{True Positive + False Negative}
```

#### ^4

```math
Accuracy = \frac{True Positive + True Negative}{True Positive + False Positive + True Negative + False Negative}
```

#### ^5

```math
F = 2 \frac{Precision * Recall}{Precision + Recall}
```