【機械学習】シンプルな回帰分析の例

こんにちは。
林@アイエンターR＆Dです

最近は機械学習の分野では、Amazon/Google/Microsoft など
世界のIT企業のトップが積極的にプラットフォームを提供しており、
ディベロッパーが機械学習を導入するハードルも下がりつつあります。

しかしながら、プラットフォームやツールの使い方は習得しても
その裏側のアルゴリズムの理解については、まだまだハードルが
高いイメージもあるかと思います。

ただ、高度な数学的な知識が必要となる部分もありますが
基本原理は高校数学レベルで理解できる部分もあります。
今回はその中でシンプルな「回帰分析」という解析手法の例を紹介します。

その前に機械学習の基本概念について少し触れておきます。

<hr />

<h3>■「教師あり学習」と「教師なし学習」</h3>
機械学習のモデルは大きく分けて「教師あり学習」と「教師なし学習」があります。

「教師あり学習」はお手本となる「教師データ」を用意し，
そのデータに沿って，将来起こりそうな事象を予測します。
機械学習のサービスの大半は、この「教師あり学習」のモデルです。

「教師なし学習」は判断するための教師データはありません。
解析対象のデータに存在する特徴を探し出し、データの似た者同士を
グループ分けする用途で使用されます。

これ以外にも「半教師あり学習」や「強化学習」と呼ばれる
モデルもありますが、今回は説明を割愛します。

<hr />

<h3>■「回帰」と「分類」</h3>
「教師あり学習」モデルでは「回帰」と「分類」という基本概念があります。

「回帰」とは、簡単に言うと「数値予測」です。
過去の入力数値から未来の数値を予測する概念です。
たとえば、「明日の日経平均株価はいくら？」とか
「明日の最高気温は何度？」などの予測をイメージしてもらうと
わかりやすいかと思います。

「分類」は、過去の入力数値を元に、新たに与えられたデータを
グループに仕分けする概念です。
迷惑メールフィルターがイメージしやすいモデルかと思います。

<hr />

<h3>■「回帰分析」</h3>
数値予測の「回帰」にフォーカスすると、回帰分析という数学的なアプローチがあります。

回帰分析とは、計測データをグラフ化したときに、それにフィットする関数を予測する方法です。

その中でも機械学習サービスは「線形回帰（linear regression）」という
数学モデルを用いています。

今回はまずは、最もシンプルな回帰分析の例で
最小二乗法で直線を推定する方法を紹介します。

つまり、下図のような、赤点のプロットデータ（x,y）に
対して、青い破線の直線の一次方程式を求める方法です。

<img src="http://www.system-i-enter.com/blog/wp-content/uploads/figure_1.png" alt="" width="600" height="450" />

＜一次方程式での推定＞
<img src="http://www.system-i-enter.com/blog/wp-content/uploads/yaxb.png" alt="" width="89" height="28" />

この方程式のaとbの値を算出することで、
先のxの値に対するyの値を推測できるようになります。

どのような直線が相応しいものかの1つの考え方として
直線と各データプロットの距離の和が最小になるように考えます。

つまり、下図のようにデータプロットの赤点と、
直線上の黄点を結んだ緑線の長さに着目します。
直線との距離の誤差が最小になるようにするイメージです。

<img class="alignnone size-full wp-image-6761" src="http://www.system-i-enter.com/blog/wp-content/uploads/figure_2.png" alt="" width="600" height="450" />

各赤点の座標を以下のように表現します。
<img src="http://www.system-i-enter.com/blog/wp-content/uploads/xiyi123.png" alt="" width="167" height="28" />

ちなみにプロットの赤点の各座標は、以下の通りです。
<img src="http://www.system-i-enter.com/blog/wp-content/uploads/xy012345.png" alt="" />

プロット赤点（Xi, Yi)と直線上の黄点の数値差をDiとすると、
<img src="http://www.system-i-enter.com/blog/wp-content/uploads/Di.png" alt="" />
と書けます。

ただ、この数値差Diは正負のどちらにも成りえますので、それらを足し合わせても
最小値の評価には成りえません。

なのでDiを二乗した総和Sで評価します。
<img src="http://www.system-i-enter.com/blog/wp-content/uploads/Sab.png" alt="" />

さらに、このS(a,b)に上記の、(X0, Y0)...(X5, Y5)の
実データを入れて計算すると、以下のような形に展開されます。

<img src="http://www.system-i-enter.com/blog/wp-content/uploads/Sab2.png" alt="" />

つまり、以下の2変数関数S(a,b)を最小にする、aとbを求めればよいことになります。

<img src="http://www.system-i-enter.com/blog/wp-content/uploads/Sab3.png" alt="" />

2変数関数の最小値を求める場合は、高校数学で学習する
<a href="http://mathtrain.jp/henbibunimi">偏微分</a>を用います。

S(a,b) が最小になるポイントでは、a,bでそれぞれ偏微分した値は0になります。

<img src="http://www.system-i-enter.com/blog/wp-content/uploads/henbibun.png" alt="" />

上記はa,bの連立方程式となりましたのでそれを解くと、aとbは以下の値になります。

<img src="http://www.system-i-enter.com/blog/wp-content/uploads/resolved_ab.png" alt="" />

つまり、以下の1次関数が求める直線になります。

<img src="http://www.system-i-enter.com/blog/wp-content/uploads/resolved_func.png" alt="" />

<img src="http://www.system-i-enter.com/blog/wp-content/uploads/figure_4.png" alt="" />

計測データには、X=6のデータはありませんが、この推測した関数を用いると、
Y = 1.4 × 6 + 2 = 10.4という数値を予測できることになります。

ただ、今回の解析は仮説ベースのものであることも忘れてはならないポイントです。

計測されたデータ群が関数に当てはめることができること自体も
仮説でありますし、それをさらに今回は直線と仮定したところも
強い縛りのある仮説になります。

ただ、仮説というモデルがなければ、収集されたデータ群から予測解析はできません。
つまり、機械学習を導入する上ではモデルの設計が重要なポイントです。
また、機械学習は厳密さをある程度割り切って「計算できる」ことに重点をおく
思想であることも重要なポイントだったりします。

今回のお話はここまで！