高校数学ではじめる機械学習 #1: 機械学習の概観 - 機械学習って何?

[目次はこちら](https://qiita.com/tomo_t/items/25035a9487bd5014754b)
##そもそも機械学習って?
みなさんもAI、機械学習、データサイエンス、ビッグデータ・・・等々の言葉を聞いたことが一度ならずあると思います。でも、その違いを説明できる人はなかなかいないのではないでしょうか？

結論から言います。
<b>私にもわかりません。</b>
というより、世の中にきちんとした定義はないと思います。IF文(機械的な条件分岐での処理)はAIなのかを議論している人たちも世の中にはいますし。

ですので、この記事を読むうえで、あまりこれらの言葉の違いに気を使わないでください。ここでは、機械学習を以下のように定義します。
「データやシステムの中の構造をコンピューターに発見させる数学的手法」

データの中の構造というのは比較的単純ではないでしょうか。例えば健康診断の結果から、「背が170cm以上あれば、その人はおそらく男である」というようなパターンをコンピューターは見つけることができます。

一方、システムの中の構造とはなんでしょう。これは一般に「強化学習」と呼ばれる手法で、ゲームや社会のルールをコンピューターに学ばせ、正しく振舞わせることを目的とします。例えば、「将棋の初手は7六歩か2六歩がよい」ということを、コンピューターはプロ棋士の棋譜データ<b>なし</b>に、自分で学習することができます。

それでは、機械学習が実際にはどのような問題を扱えるかを見ていくことにします。

##機械学習の問題の分類
機械学習が扱う問題の分類方法は何種類か提唱されていて、教科書によって少しずつ異なっています。しかし、それぞれが大幅に違うというわけではなく、典型的には次の3種類で語られることが多いです。

1. Descriptive Analysis (記述的な分析)
2. Predictive Analysis (予測分析)
3. Prescriptive Analysis (処方的分析)

それではそれぞれの問題がどういった特徴があるのか見ていきましょう。

###Descriptive Analysis (記述的な分析)
"Descriptive"というのは形容詞で、動詞にすると"Describe"つまり、「記述する、説明する、形容する」といった意味ですね。このタイプの問題が目指すのは、<b>あるデータにどういった特徴があるのか</b>を説明することです。少し想像していただくとわかるかもしれませんが、データの特徴がわかること自体はあまり嬉しくありません。ですので、このタイプの分析は、(特にPredictive Analysisの)準備段階として行われることが多いです。

と言っても、具体的なイメージがわかないと意味不明だと思いますので、いくつかの実例を挙げましょう。最も有名なDescriptive Analysisは<b>記述統計</b>と言われる種類の分析です。これは難しそうな名前をしていますが、何のことはない、各種のデータの平均値や分散、データ同士の相関などを調べる、高校生が習う統計のことです。しかし侮るなかれ、どんなデータサイエンティストも、まず初めにデータの平均や相関を調べていると思います。

もう少し高度なこのタイプの分析の代表例として、<b>クラスタリング</b>があります。これは、データの中にクラスター(かたまり)を発見して、明示されていないカテゴリ分けを見つけようとするものです。ものすごく簡単な例を挙げると、ヒトとイヌのいくつかの個体の身長体重を2次元にプロットすると、右上にヒトのかたまりと左下にイヌのかたまりができます。これは、人間の目で見れば、どの点がヒトでどの点がイヌか(ラベルと呼びます)がわからなくても、2つのグループが分かれて存在することが一目瞭然ではないでしょうか。これと同じことをコンピューターにしてもらおうとするのがクラスタリングです。人間の目は2次元や3次元の中でのまとまりを見抜くことには優れていますが、それ以上になると普通の人にはまず無理です。逆に、コンピューターは「視覚的に」まとまりを発見することはできませんが、逆にどんなに高次元でも、2次元や3次元のときと同じようにクラスターを発見することができます。

この記事の中で、このDescriptive Analysisは今後扱いません。というのは、正直あまり「ワクワクする」話ではないからです笑。興味のある方はぜひ「クラスタリング　とは」などでググってみると、素晴らしい解説が見つかると思います。

###Predictive Analysis (予測分析)
機械学習の花形?と言えるのがPredictive Analysisです。これは、既存のデータの中の関係性を見つけることで、未知のデータを予測しようとするものです。と言っても具体的に説明したほうがわかりやすいので、例を挙げましょう。

1つ目のパターンは、<b>回帰</b>と呼ばれる、数値のデータを予測するものです。最もシンプルな問題例を挙げれば、ある人の身長を知っていれば、体重を予測することができるでしょうか？おそらく、身長の高い人ほど体重も重い傾向があるので、その「傾向」を知ることができれば、標準的な体重というのは予測可能なのではないでしょうか。ここで言う「傾向」というのは、1cm身長が高い人は、平均的には0.2Kg重い、というような関係性ののことです。こういった関係性を知っていれば、ある人の身長が180cmだと知ったとき、その人の体重を推定することができます。

2つめのパターンとして、<b>分類</b>問題があります。これは、数値ではなく、yes/noやA/B/Cなどのカテゴリを予測することを目的とします。最も想像しやすい例は、入試の合否の予測ではないでしょうか。去年の東大受験生の共通試験の点数と、二次試験の点数のデータがあるとします。これがあれば、「共通試験でXX点くらい取れる人が二次試験には受かる」ということがわかりますね。その傾向を知っていれば、今年の受験生が共通試験の(自己採点)結果を見て、自分は合格しそうだから東大に出願する/難しそうだから志望を変えるといった判断をできるでしょう。これが分類問題です。

一見、回帰も分類も複数のデータの関係性を発見するという意味で同じように聞こえるかもしれません(それは正しいです)が、それぞれに適した数理的な手法は異なることが多いです。また、このPredictive Analysisが「面白さ」やビジネスマンにとっての「実用性」に優れているので、今後の記事では紙面を割いて詳しく話します。

###Prescriptive Analysis (処方的分析)
Prescriptiveというのはあまり聞きなれない単語かもしれませんが、"Prescription"と言うのは処方箋のことです。Predictive Analysisと違って、「こう行動するのが最適だよ」とやるべき行動を教えてくれるのが、このPrescriptive Analysisです。

最近の最も有名な例は将棋ソフトでしょう。将棋ソフトは、色々考えた上で「次の一手」を教えてくれます。また、自動運転システムなどもこのPrescriptive Analysisの一種です。

このタイプの問題は、比較的手軽な問題(例えば将棋や囲碁)でも解くのが非常に難しく、専門性を必要とします。自動運転ソフトの開発に何人のデータサイエンティストが何年間働いているのかなど、想像もつきません。とはいえ、近年重要になってきている分野ですので、<b>強化学習</b>という手法を最後の記事で紹介する予定です。

##データサイエンティストに必要な能力
さて、以上で機械学習の問題の枠組みを説明しました。ではこのような問題を解けるようになるためには、どういったスキルや知識が必要なのでしょうか？私見ですが、必要な能力は
・数学、アルゴリズム的な手法の理解
・実装するコーディングのスキル
・ビジネスや問題への理解
の3つだと考えます。

数学、アルゴリズム的な手法の理解、というのは、「この問題にはどういったアプローチをするべきか」「うまくいかないのはどうしてなのか」などといった考えをする能力です。これが一番データサイエンティストの能力に差が付きます。

実装するコーディングのスキルは読んでそのまま、プログラミングの能力です。個人的な感覚ですが、上記よりも差が付きにくい、勉強することでキャッチアップが可能な領域だと思います。なぜかというと、有名な手法というのはすでに簡単に使えるように誰かがまとめてくれていて(ライブラリといいます)、データサイエンティストが0からコードを書くケースは少ないからです。

ビジネスや問題への理解というのは見落とされがちですが、とても重要な能力です。というのは、どういったデータを集めるべきかや、どんな変数を作るか、といった洞察はその問題自体を理解していないとなかなかできないからです。しかし(当然ですが)、この分野はデータサイエンティストよりも会社の実部門のビジネスマンの方が詳しかったりします。ですので、データサイエンティストの仕事を理解しながら、この部分を補完してあげられる人材というのがこれから重宝されるのではないでしょうか。