「機械学習」まとめ連載（其の１・機械学習とは）

#機械学習とは

こんにちは、mucunです。

この連載では、私なりに勉強してきた「機械学習」の知識について、
なるべく綺麗にまとめて、紹介していきたいと思います。

「AI」「人工知能」「機械学習」「ディープラーニング」、、、
これらのワードが一気呵成にバズり始め、
真剣に導入を考える企業が少なくない昨今。
非常にＨＯＴな技術領域と言えます。

##言葉の整理
先ず、言葉の整理です。
「AI」「人工知能」「機械学習」「ディープラーニング」、、、
これらは違う領域を指しています。
違いについては、下記画像引用元記事に詳しく書いてありました。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/4c538bd4-f890-c85e-7dab-13bdaf109825.png">
（画像引用元：[【NVIDIA】人工知能、機械学習、ディープラーニングの違いとは](https://blogs.nvidia.co.jp/2016/08/09/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/)）

分かりやすい！！
「AI・人工知能」がより抽象的な概念、広義な意味合い。
「機会学習」がそれを実現する手法の１流派。
「ディープラーニング」が、「機会学習」の内の１手法という関係です。

##機械学習の意味するところ
次に、「機械学習」の意味を掘り下げていきます。
[wiki](https://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92)によれば、
>機械学習（きかいがくしゅう、英: machine learning）とは、
>人工知能における研究課題の一つで、
>人間が自然に行っている学習能力と同様の機能を
>コンピュータで実現しようとする技術・手法のことである。

とのこと。
また、統計解析で有名な[SAS](http://www.sas.com/ja_jp/insights/analytics/machine-learning.html)によれば、
>機械学習とは、データから反復的に学習し、
>そこに潜むパターンを見つけ出すことです。
>そして学習した結果を新たなデータにあてはめることで、
>パターンにしたがって将来を予測することができます。 

とのこと。
まとめると、

* **人間の学習をコンピューターで再現する手法**
* **データの法則性を抽出し、そこから将来予測をする手法**

ということですね。
つまり、行動科学の解明であり、パターン識別であるという訳です。

##具体例から説明

例えば、男女の判断を見た目から識別してみます。

分かりやすく、以下の項目で判断することにします。

1. 身長の高さ
1. 髪の長さ
1. 髭の濃さ

サンプルデータを以下５件とします。

| 名前  | 身長 | 髪の長さ | 髭の濃さ | 性別 |
|:-----:|:---------:|:-------:|:--------:|:----:|
| Aさん | 170       | <img height="39" src="https://qiita-image-store.s3.amazonaws.com/0/126499/67b33d49-5466-ffd1-3a18-c318ba8b7e7f.jpeg"> | 濃い | 男 |
| Bさん | 180       | <img height="39" src="https://qiita-image-store.s3.amazonaws.com/0/126499/b2646509-39c8-a38e-cc7b-74fda0c59e11.jpeg"> | 少し | 男 |
| Cさん | 160       | <img height="39" src="https://qiita-image-store.s3.amazonaws.com/0/126499/f937b50c-e34e-d3ad-3701-a683d3471358.jpeg"> | まあまあ濃い | 男 |
| Dさん | 150       | <img height="39" src="https://qiita-image-store.s3.amazonaws.com/0/126499/a866b1d4-7830-a971-9025-c8a380e36afc.jpeg"> | ほんの少し | 女 |
| Eさん | 170       | <img height="39" src="https://qiita-image-store.s3.amazonaws.com/0/126499/c10c9646-c8e3-6449-dba4-55eefbec6d97.jpeg"> | 無し | 女 |

これらの与えられたデータから、
「男性／女性」を識別する決め手を抽出するのが機械学習です。

学習の前には、データの数値化とスケール合わせをします。
データの値域は、「-1～1」か「0～1」に調整することが多いです。
値の意味合いによって、調整の仕方は考える必要があります。
特に、ZEROの意味をしっかり考慮しなくてはなりません。
（※この辺りについては、いずれ掘り下げたいと思います）

実際にやってみると、こんな感じです。

| 名前  | 身長 | 髪の長さ | 髭の濃さ | 性別 |
|:-----:|:----:|:-------:|:--------:|:---:|
| Aさん | 0.70 | 0.20    | 1.00     | 1   |
| Bさん | 0.80 | 0.60    | 0.30     | 1   |
| Cさん | 0.60 | 0.40    | 0.50     | 1   |
| Dさん | 0.50 | 0.60    | 0.10     | 0   |
| Eさん | 0.70 | 0.90    | 0.00     | 0   |

このデータを使って、機械学習を行います。
具体的に行うことは、データ項目ごとに統計的な決め手度合の計算です。
その度合のことを、一般的に「重み」と言います。
例えば、

1. 身長の高さ ⇒ 重み：0.5
1. 髪の長さ　 ⇒ 重み：-0.9
1. 髭の濃さ　 ⇒ 重み：0.7

という具合に計算します。
実際の計算方法については、次回以降で掘り下げます。

この重みをサンプルデータに対して掛けて、その総和を取ります。

| 名前  | 身長 × 0.5 | 髪の長さ × -0.9 | 髭の濃さ × 0.7 | 総和 |
|:-----:|:---------:|:--------------:|:--------------:|:---:|
| Aさん | 0.35      | -0.18          | 0.70           | 0.87 |
| Bさん | 0.40      | -0.54          | 0.21           | 0.07 |
| Cさん | 0.30      | -0.36          | 0.35           | 0.29 |
| Dさん | 0.25      | -0.54          | 0.07           | -0.22 |
| Eさん | 0.35      | -0.81          | 0.00           | -0.46 |

すると、男性がプラスの値、女性がマイナスの値が出るように、
「重み」が調整されていることが確認できます。
つまり、総和の値が ZEROより上か下かで識別ができています。
この時の境界値のことを「閾値」と呼びます。
「閾値」は、ZEROでも、ZEROでなくても構いません。
今回は、ZEROが「閾値」になるように調整がされています。

一度、「重み」が算出できれば、未知のデータでの予測ができます。
例えば、以下のような未知のデータがあったとします。

| 名前  | 身長 | 髪の長さ | 髭の濃さ | 性別 |
|:-----:|:---------:|:-------:|:--------:|:----:|
| Fさん | 170       | <img height="39" src="https://qiita-image-store.s3.amazonaws.com/0/126499/79c81dfc-8d57-6a6a-51c5-378693319a17.jpeg"> | 少し | ？ |
| Gさん | 160       | <img height="39" src="https://qiita-image-store.s3.amazonaws.com/0/126499/51b5c457-a4b9-0e2d-7962-7e01d9bf2e15.jpeg"> | ほんの少し | ？ |

予測の際にも、データの数値化とスケール合わせをします。

| 名前  | 身長 | 髪の長さ | 髭の濃さ | 性別 |
|:-----:|:----:|:-------:|:--------:|:---:|
| Fさん | 0.70 | 0.40    | 0.30     | ？   |
| Gさん | 0.60 | 0.90    | 0.10     | ？   |

そして、「重み」を掛け合わせます。

| 名前  | 身長 × 0.5 | 髪の長さ × -0.9 | 髭の濃さ × 0.7 | 総和 |
|:-----:|:---------:|:--------------:|:--------------:|:---:|
| Fさん | 0.35      | -0.36          | 0.21           | 0.10 |
| Gさん | 0.30      | -0.81          | 0.07           | -0.44 |

よって、予測は以下となります。

| 名前  | 性別予測 |
|:-----:|:-------:|
| Fさん | 男性     |
| Gさん | 女性     |

以上、機械学習のイメージを掴んでもらうために、
具体例でもっての説明でした。

##要するに、、、

まとめると、

* **識別のための「重み」を算出するのが「機会学習」**
* **「重み」を算出すれば、未知のデータで予測ができる**

です。

今回の記事はここまでとなります。
読んで下さった方、ありがとうございました。<(_ _)>