機械学習って何ですか？


はじめに
====

* 機械学習 (Machine Learning)って何だろう？
* 「機械」が「学習」するの？
* 「機械」ってロボットとかAIとかいうやつ？
* どうやって「学習」するの？
* 普通の人には分からない何かで出来てるの？
* そもそも何なの？！

という疑問とか質問とか苛立ちがある人はきっといると思います。（少なくとも僕はそう思ってる）

それについてざっくり答えてみます。

##何に使われてるの？

色々使われてる。本当に色々なところで使われている。

例えば、Amazonとかのオススメ機能とか。

（例： 伊藤計劃の『虐殺器官』を買ったら、フィリップ・K・ディックの『アンドロイドは電気羊の夢を見るか?』がオススメされたり）

後は下の例を見てください。
[日常にある機械学習の応用例](http://postd.cc/practical-machine-learning-problems/)

##で、一体何なの？

困ったら、Wikipediaを見てみましょう。
http://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92

> 機械学習（きかいがくしゅう、Machine learning）とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。

いや、これって「機械（＝コンピュータ）」が「学習」するっていうことだから、結局言ってること同じでしょ？（怒）

概要も読んでみる。

> センサやデータベースなどからある程度の数のサンプルデータ集合を入力して解析を行い、そのデータから有用な規則、ルール、知識表現、判断基準などを抽出し、アルゴリズムを発展させる。

何となく分かってきたので、ざっくり要約してみる。

機械学習とは

1. 色んなデータがたくさんある。（＝入力）
2. それを使ってある法則（パターン）を見つける。
3. その法則（パターン）を使ってアルゴリズムを作る。

ってことらしい。

もっと具体的な例で考えてみよう。

##例えば

こんな問題を考えてみよう。

    Q. ある学校にいる100人の生徒の身長と体重が分かっているとする。ここで、101人目のAさんの身長が165cmで、体重はいくらか？

もちろん答えは、

    A. お前は何を言っているんだ？

そう分かるはずがない。実際に計測してみるのが一番早い。

ただ、Aさんというのはとても恥ずかしがり屋なので、自分の体重を知られたくないらしい（※あくまでも妄想です）。

そこで機械学習を使ってみましょう。

##とても簡単に機械学習してみる

今回使う機械学習の必殺技は「単回帰分析」というやつです。

[単回帰分析とは](http://www.albert2005.co.jp/technology/multivariate/s_regression.html)

ざっくり言うと、

    y = ax + b

を求めるということらしい。

先ほどの例で置き換えてみる。

知っている情報は[身長]で、求めたいのは[体重]なので、下記となります。

    [体重] = a × [身長] + b

ん？ 結局、aとかbって何だ？

まあ、ひとまずはこうしておこう。

    [体重] = [魔法のパラメータa] × [身長] + [魔法のパラメータb]

そこで先ほどのAさんの身長を入れてみる。

    [体重] = [魔法のパラメータa] × 165(cm) + [魔法のパラメータb]



さあ、後は [魔法のパラメータa] と [魔法のパラメータb] が分かれば、Aさんの体重が分かります。

やったね！

と、ちょっと待った。その [魔法のパラメータa] と [魔法のパラメータb] を求めるにはどうするの？
というかその怪しいパラメータはそもそも何？

ここで機械学習の1つ目 <strong>色んなデータがたくさんある。（＝入力）</strong> というのを使います。
具体的にはAさん以外の100名の生徒の身長の体重の計測値を使ってグラフを作ります。

こんな感じ。

参照： [図16.身長から体重を予測](http://www.albert2005.co.jp/technology/multivariate/s_regression.html)

当然、身長の割に太っている人も痩せている人もいるので、ばらつきがあります。

しかし、真ん中の斜めの線を見ると、このグラフには一定の比例の法則が見て取れます。

それが、機械学習の2つ目 <strong>それを使ってある法則（パターン）を見つける。</strong> です。

（というか大体において、身長が低い人は体重も軽く、身長が高い人は体重が重くなる傾向になるのは何となく分かるかと思います）

ここで最初の <code>y = ax + b</code> の式を思い出してください。

* [魔法のパラメータa] = 線の傾き
* [魔法のパラメータb] = 切片

そう考えると、ただの算数ですね。
（※正しく <code>a</code> と<code>b</code> を求める式は面倒なので省略します。「単回帰分析、方程式」でググれば求める方程式があると思います）

これが、機械学習の3つ目 <strong>その法則（パターン）を使ってアルゴリズムを作る。</strong> です。

これでAさんの体重（予想）は、ざっくり65kgということが分かりました。

まとめると、

機械学習を実際の例で適用すると、

1. 色んなデータがたくさんある。（＝入力）: <strong>100人分の身長と体重のデータを使う。</strong>
2. それを使ってある法則（パターン）を見つける。: <strong>身長と体重には正比例の関係があることを見つける。</strong>
3. その法則（パターン）を使ってアルゴリズムを作る。: <strong><code>[体重] = [魔法のパラメータa] × [身長] + [魔法のパラメータb]</code> を求める。</strong>

##データが増えると、[魔法のパラメータ]が変わる

ざっくり言うとサンプルデータが増えて、[魔法のパラメータa] と [魔法のパラメータb] の値が変化することです。

例えば、

先ほどの100人の生徒のデータに、追加で100人の痩せ過ぎの生徒のデータを追加したとします。

すると先ほどの正比例の線がx軸に近づいてきます。

結果として、Aさんの体重（予測）は50kgになることもあり得ます。

流れで見てみましょう。

##データを追加しては、[魔法のパラメータ]を求める流れ

1、 生徒100人のデータを入れる。
2、仮に魔法のパラメータが下記の通り分かったとする。

    [魔法のパラメータa] = 0.3
    [魔法のパラメータb] = 15.5

3、Aさんの体重が65kgと推測出来る。
4、追加で100人の痩せ過ぎの生徒のデータを入れる。
5、仮に魔法のパラメータが下記の通り分かったとする。

    [魔法のパラメータa] = 0.2
    [魔法のパラメータb] = 17.0

6、Aさんの体重が50kgと推測出来る。
7、入力データを追加して入れる。
8. ひたすら続く

##_これを続ければ、正しそうな体重をいつか求めることが出来るはずです。_

これでAさんの体重を、実際に計測せずに推測（妄想）することが出来ますね。

おわりに
====

色々なアルゴリズムや技法があるみたいなんですが、機械学習が何となく分かった気になれたらと思います。
あと間違ってたり、もっと良い説明の方法があったら教えてくれると嬉しいです。