はじめに
今回は、機械学習の中でも比較的簡単な、単回帰分析について、図を用いながら解説していきます。
「単回帰分析の勉強をしているけど、何をやっているのかわからない」という方にもわかるように記事を書いているつもりです。
是非ご活用ください。
この記事でわかること
- 単回帰分析とはなにか
- 回帰直線を求める手順
- 回帰直線を求めるためのアルゴリズム
単回帰分析とは
単回帰分析とは具体的に何をしているのか、という点から解説していきます。
ずばり、単回帰分析とは、
少しわかりにくいですね。
ここでは単純に、「1種類の情報から、何かに対しての予測をするやつ」とでもしておきましょう。
これでもまだわかりにくいと思うので、具体例を用いて解説していきます。
具体例として、ある家の家賃を予測する場面を考えてみましょう。
本来、家の家賃は様々な要因で決まるものですが、ここでは「部屋の広さ」だけで家賃が決まるものとします。
こんな感じの状況です。
当然、部屋の広さが広いほど家賃は高く、狭いほど家賃は安くなりますよね。
ここで、部屋の広さと家賃はなんとなく比例関係がありそうなことに気づきます。
横軸に部屋の広さ、縦軸に家賃をとって、実際のデータをプロットしてみると、以下のようなグラフになったとしましょう。
これを眺めていると、何やら直線を引きたくなりますよね。
っていうか絶対になりますね。
じゃあ、このグラフにとって一番当てはまりがいい直線を求めたら、実際にデータがなくても、部屋の広ささえわかっていれば、大体の家賃を予測できそうじゃないですか。
つまり、この直線を求めることが単回帰分析での目標となります。
ちなみに、この直線のことを回帰直線と言います。
直線を求めると言っても、実際に求める値は、直線の傾きだけで十分です。
なんとなく、やりたいことはわかったと思うので、次の章からは、実際にどのようにして、当てはまりがいい直線を求めることができるのかを解説していきます。
回帰直線を求める手順
先程のグラフで見ていただいたように、部屋の広さと家賃は、なんとなく比例関係があります。
つまり、式で表すと、
$$家賃 = 比例定数 \times 部屋の広さ$$
こんな感じになりそうですね。
では、次は、数式として表してみます。
ここでは、予測する家賃を\(\hat{y}\)、部屋の広さを\(x\)、比例定数を\(w\)とします。
数式化するとこんな感じです。
$$\hat{y} = wx$$
(本来はノイズとして、切片がありますが、今回は説明の都合上切片=0とします。)
では、ここから手順を見ていきます。
まず、どういった直線が、一番当てはまりがいいと言えるのかを設定する必要があります。
もちろん、実際の家賃と予測した家賃が近ければ近いほど、正確であると言えそうですよね。
これを、どのように表現するといいのでしょうか。
ずばり、すべてのデータに対して、実際の家賃と予測した家賃の誤差を最小にすることで、一番当てはまりがいい直線を求めることができそうですね。
図でいうとこんな感じです。
では、これを数式化してみましょう。
実際の家賃の値を\(y\)とすると、予測した家賃は\(\hat{y}\)なので、1つのデータに対しての予測との誤差は、
$$誤差 = y – \hat{y}$$
で表せます。
手元にあるすべてのデータに対して、同じように誤差を求め、それらすべてを足し合わせると、誤差に関する式ができそうですよね。
でもこれじゃあ不十分です。
誤差と言っても、予測した家賃の方が高かったり安かったりするので、誤差自体はプラスの値とマイナスの値の両方を取ります。
これらをそのまま足し合わせてしまうと、いい感じに誤差が無くなってしまうかもしれません。
つまり、符号を統一する必要があるということです。
符号を統一する方法のひとつとして、それぞれの誤差の絶対値をとる、という方法がありますが、こちらは計算の都合上、あまりうれしくないので、別の方法を考えることにします。
別の方法で符号を統一する方法とは、誤差の二乗をとってやれば良さそうですね。
こうすることで、プラスとマイナスの両方の値があった誤差たちも、すべてプラスに統一することができます。
では、二乗して得られた誤差をすべて足し合わせていきましょう。
誤差を二乗して足し合わせることで得られる式を\(L\)とすると、こんな感じになります。
データの数を\(n\)個としています。
$$L = (誤差1)^2 + (誤差2)^2 + … + (誤差n)^2 $$
これだと、見にくいので、\(\sum\)を使って数式で表してみましょう。
こんな感じです。
$$L = \sum_{i=1}^n(y_{i}-\hat{y_{i}})^2$$
こうして、できた数式\(L\)を誤差関数といいます。
数学記号のせいで難しく見えるのですが、単純に、1つ1つのデータに対する誤差の二乗を足し合わせているだけなので、安心してください。
では、次の章では、先程作った誤差関数を最小にする比例定数 \(w\) を求めるアルゴリズムを解説していきます。
回帰直線を求めるアルゴリズム
では、比例定数 \(w\) を求める方法を見ていきましょう。
数学的に誤差関数の最小値を求める場合は、高校で習ったアレを使います。
そうです、「微分」です。
まさか、このような場面で活躍するなんて誰が想像できたでしょうか。
では、微分を用いて誤差関数の最小値を求めるにはどうするのでしょうか。
簡単ですね。
関数の最小値を求めればいいわけですから、高校数学の問題と同じ要領で、誤差関数に対する導関数を求めて、導関数=0となる点を見つければいいわけです。
しかし、今回は、数学的に解くのではなく、アルゴリズムを用いて解くためこの方法は使いません。
では、誤差関数の最小値を求めるアルゴリズムを解説します。
今回使うアルゴリズムは、「勾配降下法」というアルゴリズムです。
勾配降下法について詳しく解説した記事もあるので、気になった方はこちらも見てみると面白いかもしれません。
はじめに 今回は、機械学習によく使われるアルゴリズムの1つである、勾配降下法について解説していきます。 今回の記事の流れは以下のようになります。 今回の記事の流れ そもそも勾配降下法とは何か 勾配降下法[…]
実際に展開して確認してみるとわかると思いますが、この誤差関数は、展開すると \(w\) に関しての二次関数となります。
つまり、誤差関数の最小値を求めるには、\(w\) に関する二次関数の最小値を求めることと同じわけです。
適当にグラフを書くとこんな感じになります。
パッと見てわかるように、誤差関数の最小値は、図の真ん中あたりのやつでしょうね。
では、誤差関数を最小にする \(w\) の値を勾配降下法を用いて求めていきましょう、と言いたいところですが、まずは勾配降下法がどんな感じのものなのかを説明します。
簡単に言うと、ある点から、向きと大きさを決めて少しずつ最小値がある方向に移動していく、というアルゴリズムです。
わかりにくいですね。
図を用いながら説明します。
まず、最初に適当な位置に点を取ります。
この場合、最小値となる点に向かうには、マイナス方向に寄せる必要がありますよね。
では、マイナス方向に少し移動してみましょう。
先程よりも、最小値に近い値になりましたね。
この一連の作業を繰り返すことで最小値となる比例定数 \(w\) を求めるアルゴリズムが、勾配降下法です。
なんでこんな面倒な方法で最小値を求めるのかは、ちょっと難しい話になるので、混乱を避けるためにも今回は割愛します。
では、今回扱っている誤差関数の場合はどうなるのでしょうか。
今回の誤差関数は単純な形をしているため、比簡的簡単に比例定数 \(w\) が求まります。
その値を用いると、今回のグラフに1番当てはまりがいい直線はこのように決定します。
直線が求まったので、未知のデータに対しても、ある程度正確な予測を立てることができるようになりました。
ここまでが、単回帰分析の一連の流れです。
おわりに
今回は、部屋の広さから家賃を求めるという設定で、単回帰分析について解説してみました。
でも、普通に考えたら、家賃は1つの情報で決まっているわけではないですよね。
そうなんです。
本来は、部屋の広さに加え、駅からの距離や、築年数、間取りなど、様々な要因から家賃は決定します。
このように、複数ある情報から予測を立てる分析を、重回帰分析といいます。
単回分析より現実的であるのですが、ほんの少しだけ複雑になります。
後日、重回帰分析についての解説記事も書く予定なので、楽しみにしていてください。
下にリンクがあります。
では、今回はここまでとします。
お疲れさまでした。
重回帰分析の記事を追加しました。
はじめに 今回は、前回の単回帰分析の応用である重回帰分析について解説していきます。 応用と言っても、ほとんど単回帰分析と変わらないので、あまり気負いせずに目を通してみてください。 そもそも単回帰分析って何?という方は、[…]