最小二乗法で傾きを求める方法を数学的に理解しよう

最小二乗法で傾きを求める方法を数学的に理解しよう

回帰直線の傾きは公式で簡単に求められますが、数学的な意味を理解しておくとなぜそうなるかがわかります。今回は数学的な意味を見ていきます。

問題設定:最高気温とアイスクリーム販売数のデータを用いて、今日の気温予報からアイスクリーム販売予測を行う。

データ

最高気温 (℃) アイスクリーム販売数 (個数)
20 28
21 26
22 24
24 33
23 31
25 38
26 36
27 37
28 42
29 39
30 43
31 48
32 49
33 46
34 52
35 49

最高気温とアイスクリーム販売数エクセルシート(中心化タブ)

出力変数:y はアイスクリーム販売数

入力変数:xは最高気温

アプローチ方法

  1. 学習フェーズ
    • 最高気温とアイスクリーム販売数に相関関係があるかどうかを散布図で確認
    • 相関関係のあるデータからモデルを作成することで、何らかの式を導き出す。
    • 誤差を少なくするために評価関数を決める
  2. 推論フェーズ
    学習済のモデルを使って予測したい最高気温からアイスクリーム販売数を予測する

今回は学習フェーズのモデル作成と評価関数に置ける数学の意味を学習します。

学習フェーズ〜モデル作成

どのようなモデルにするか決める。

今回は散布図から回帰直線を描くことができると考えられます。

最高気温とアイスクリーム販売数の散布図

回帰直線の式

$$
\hat{y} = ax + b
$$

  • a,bがパラメータで、aは傾きbは切片
  • xは最高気温
  • \(\hat{y}\)が予測値のアイスクリーム販売予想数

ゴールは最高気温からアイスクリームの販売数を予測することになります。それはつまり、aの傾きとbの切片を適切に決めることがゴールにつながります。

データの中心化(センターリング)

回帰直線が x=0, y=0 の座標を通るようにすると分析が楽になります。そのための手法がデータの中心化です。

\(\hat{y} = ax + b​\) の式を \(\hat{y} = ax​\) の式で表されるように中心化を行います。

中心化の方法

\(\bar{x} \) :xの値の平均

\(\bar{y} \) :yの値の平均

平均値との差で全体の値を中心に移動することができます。

そしてこの作業は偏差とも呼ばれています。

つまり偏差を求めることでそれはセンタリングしていると考えることができます。

\( x_c = x -\bar{x} \)
\(y_c = y – \bar{y}\)

とすることで

\(\hat{y_c} = ax_c\)

のように切片が0の式を作ることができます。なお、\(\hat{y}\) は予測値を表します。

そしてこれをグラフにするとx=0 y=0の点を通るグラフになります。

最初の散布図から最高気温の偏差とアイスクリームの販売数の偏差で散布図を作ると以下のようになりセンタリングされていることがわかります。

中心化した最高気温とアイスクリーム販売数の散布図

モデリングの前提としてデーターの中心化済みにして \(\hat{y} = ax\) の式にしておくことは重要な手順です。

誤差

これまでの内容は事前準備です。ここから先は、ゴールに繋がる傾きの求め方になります。
評価関数の値を最小にすることで、ベストな傾きを算出することができます。
この方法を最小二乗法と言います。

二乗誤差

実際のアイスクリーム販売数をy、予測値を\(\hat{y}\)とします。中心化では販売数から平均を引きましたが、こちらは予測値の誤差を求めていますので販売数から予測値を差し引きます。中心化と似たような式ですから混乱しないようにしましょう。
ここでいう予測値\(\hat{y}\)とは \(\hat{y} = ax\) の ax で導き出される値ことです。

適切な a(傾き)を決めるには、評価関数(損失関数)を決めることにつながります。散布図から人間が直感的に傾きを決めることは意外と簡単ですが、コンピューターに答えを出させるには少し面倒なことをする必要があります。

一般的に評価関数はL(エル)で記述します。
評価関数は次のようになります。
$$
L = (y_1 – \hat{y_1})^2 + (y_2 – \hat{y_2})^2 + (y_n – \hat{y_n})^2
$$

$$
= \sum_{n=1}^N(y_n-\hat{y}_n)^2
$$

評価関数を最小化

ゴールに近づくには評価関数を最小化するように数学的に式を作れば良いことになります。

評価関数をグラフ表示するには、縦軸に評価関数の結果をプロットし、横軸をaの傾きとした2次関数のU字型のグラフになります。
2次関数をグラフ化するとU字型の曲線になります。この曲線の接線を限りなく0に近づけることが誤差の少ない回帰直線の傾きになるはずです。
そして、ある値の傾きを取得するには微分すれば良いのです。

微分とはつまり、ある値の傾きを求めることだから、微分をして傾き0の点を探します。

評価関数の微分方法

評価関数Lの公式は次のようなものです。
$$
L = \sum_{n=1}^N(y_n-\hat{y}_n)^2
$$
評価関数は2次関数ですから、U字型のグラフになります。

このグラフで傾きが0になるポイントを探すわけです。

ある点の傾きは微分で得られますので、次の式を導き出すことができます。
$$
\frac{\partial}{\partial{a}}(L) = 0
$$

次に評価関数Lの具体的な微分を行ってみる。Lは次の公式で表されるので右辺の式を微分すれば良いことになります。

$$
L = \sum_{n=1}^N(y_n-\hat{y}_n)^2
$$
しかし、このままでは右辺には傾きaが含まれていません。

従って、少し式変形します。

今回は回帰直線を求めたいのだから基本\(y_n = ax_n ​\) のような式になるはずです。

つまり、この式を先ほどの公式に代入します。
$$
L = \sum_{n=1}^N(y_n-\hat{y}_n)^2 \\
  \\
\hat{y}_n = ax_n \\
  \\
L = {\sum_{n=1}^N}(y_n – ax_n)^2
$$

二乗部分を展開したら次のようになります。

$$
L = \sum_{n=1}^N(y_n^2 – 2y_nax_n + a^2x^2_n)
$$
さらにシグマ記号の式変形します。
$$
L = \sum_{n=1}^Ny_n^2 – 2a(\sum_{n=1}^Nx_ny_n) + a^2(\sum_{n=1}^Nx_n^2)
$$

ここから偏微分を実行します。偏微分とは多変数の微分のことです。
一見難しそうですが、変数をうまく分解して一つ一つ微分するだけです。

\(\frac{\partial}{\partial{a}}(L) = 0\) の微分をする場合aが含まれる部分だけ着目して、微分の公式を当てはめます。

微分の公式

1の微分、aの微分、\(a^2\)の微分は次の公式が成り立つ

  • (1)’ = 0
  • (a)’ = 1
  • \(a^2​\)’ = 2a
偏微分の記号\(\partial\)はラウンドディーと読みます。

さて、ここからは数学的な処理を行います。
複雑なシグマ記号部分は偏微分と関係ありませんので \( C_0,C_1,C_2 \) の変数に変更して見やすくします。
$$
L = C_0 – 2C_1a + C_2a^2 \\
$$

これでスッキリしました。
後は微分の公式にしたがって微分すれば良いです。

$$
\frac{\partial}{\partial{a}}(L) = 0 \\
\frac{\partial}{\partial{a}}(C_0 – 2C_1a + C_2a^2 ) = 0 \\
0 – 2C_1 \times \frac{\partial}{\partial{a}}(a) + C_2 \times \frac{\partial}{\partial{a}}(a^2) = 0 \\  
-2C_1 + 2C_2a = 0 \\ 
2C_2a = 2C_1 \\
a = \frac{C_1}{C_2} = \frac {\displaystyle\sum_{n=1}^Nx_ny_n}{\displaystyle\sum_{n=1}^Nx_n^2}
$$

傾きaを求める公式

$$
傾き a = \frac{\frac{1}{n}{\displaystyle\sum_{i=1}^{n}}(X_i – \overline{X})(Y_i – \overline{Y})}
{\displaystyle{\frac{1}{n}\sum_{i=1}^{n}}(X_i – \overline{X})^{2}}
= \frac{\displaystyle\sum_{i=1}^{n}(X_i – \overline{X})(Y_i – \overline{Y})}
{\displaystyle\sum_{i=1}^{n}(X_i – \overline{X})^{2}}
$$

以上のことから、この公式に数値を当てはめると回帰直線の傾きを求めることができます。