【数式をていねいに】最小二乗法 〜単回帰のパラメータを求める〜

今回は最小二乗法を紹介します。

最小二乗法とは、データ群とモデル(関数)の二乗誤差を最小にするパラメータを求める手法で、回帰問題等でよく用いられる手法です。

今回は単回帰の最もシンプルな例を用います。
少し数式が多くなりますが丁寧に解説していきます。

二乗誤差

まず最小化したい二乗誤差ですが、
これはモデル(関数)と実際のデータと差(誤差)を二乗した誤差です。

例えば以下のようなデータがあります。

そして、今回は線形モデル\(y=ax+b\)によって表現したいとします。

このときのモデルとデータとの二乗誤差は、

この図の\(E_i\)の総和がモデルと各データとの二乗誤差の和が二乗誤差となります。

$$
\begin{eqnarray}
E &=& E_1 + E_2 + E_3 + E_4 + E_5 \\
&=& \bigl(y_1- (ax_1+b) \bigr)^2+ \bigl(y_2- (ax_2+b) \bigr)^2+ \bigl(y_3- (ax_3+b) \bigr)^2 \\
&+& \bigl(y_4- (ax_4+b) \bigr)^2 + \bigl(y_5- (ax_5+b) \bigr)^2 \\
&=& \sum_{i=1}^{5}\bigl(y_i- (ax_i+b) \bigr)^2 \\
\end{eqnarray}
$$

これをデータがn個の場合で一般化すると

$$
\begin{eqnarray}
E &=& \sum_{i=1}^{n}\bigl(y_i- (ax_i+b) \bigr)^2\\
&=& \sum_{i=1}^{n}\bigl(y_i- ax_i-b) \bigr)^2
\end{eqnarray}
$$

これを二乗誤差と言います。
なぜ、誤差に二乗するのかというと、単純な誤差(これを絶対誤差という)だと 誤差を総和誤差同士で打ち消してしまい、誤差が消えて可能性があるからです。

最小二乗法では、この二乗誤差を最小化するようなパラメータを求めます。

最小二乗法の手順

では、先程の二乗誤差を最小化するパラメータを求めてみましょう。

手順としては、以下のようになります。

  1. 二乗誤差をパラメータ\(a\), \(b\)によって微分(偏微分)し、勾配が0となる2つの方程式を得る
  2. 2つの連立方程式を解いて、パラメータ\(a\), \(b\)を求める

では、最小二乗法によってパラメータ\(a\)と\(b\)を求めてみましょう。
まず、データの集合とモデルの誤差\(E\)は以下のようになります。

1. 二乗誤差をパラメータ\(a\), \(b\)によって微分し、勾配が0となる2つの方程式を得る

この二乗誤差を最小にする値は、
この二乗誤差の各パラメータ\(a\), \(b\)に対する勾配が0になるところを求めれば良いことがわかります。

まず、二乗誤差\(E\)をパラメータ\(a\)によって微分してみましょう。

同様にパラメータ\(b\)によって微分します。

2つの方程式(連立方程式)が得られました。

$$
\begin{eqnarray}
-\sum_{i=1}^{n} x_iy_i +a\sum_{i=1}^{n}x^2_i + b\sum_{i=1}^{n}x_i = 0 \tag{1} \\
\sum^{n}_{i=1}y_i -a \sum^{n}_{i=1}x_i -nb = 0 \tag{2}
\end{eqnarray}
$$

この連立方程式を使って\(a\)と\(b\)を求めていきます。

2. 得られた連立方程式を解く

(1)式に\(\times n \)

$$
\begin{eqnarray}
– n\sum^{n}_{i}x_i y_i + na \sum^{n}_{i} x^{2}_{i} + nb\sum^{n}_{i}x_i = 0 \tag{3}
\end{eqnarray}
$$

(2)式に\(\times \sum_{i}x_i\)

$$
\begin{eqnarray}
\sum^{n}_{i=1}x_i\sum^{n}_{i=1}y_i -a (\sum^{n}_{i=1}x_i)^{2} -nb\sum^{n}_{i=1}x_i = 0 \tag{4}
\end{eqnarray}
$$

(3)+(4)は

$$
\begin{eqnarray}
na\sum^n_{i=1} x_i^2 + \sum^n_{i=1} x_i \sum^n_{i=1} y_i -n \sum^n_{i=1} x_i y_i -a (\sum^n_{i=1} x_i)^2=0 \\\\
a(n\sum^n_{i=1} x_i^2 – (\sum^n_{i=1} x_i)^2) = -\sum^n_{i=1} x_i \sum^n_{i=1} y_i + n\sum^n_{i=1} x_i y_i \tag{5} \\
\end{eqnarray}
$$

(5)式をパラメータ\(a\)で整理すると

よって、

$$
\begin{eqnarray}
a = \frac{\frac{1}{n}\sum^n_{i} x_i y_i-\bar{x}\bar{y}}{\frac{1}{n}\sum^n_{i} x_i^2 – \bar{x}^2}
\end{eqnarray}
$$

同様にパラメータ\(b\)についても求めます。
式(2)と先程求めた\(a\)から

$$
\begin{eqnarray}
nb &=& \sum^n_{i} y_i -a \sum^n_{i} x_i \\
nb &=& n\bar{y} – a n\bar{x} & \scriptstyle{\bar{x}=\frac{1}{n}\sum_{i}^{n}x_i\text{から}} \\
\end{eqnarray}
$$

から、式を整理すると\(b\)は、

$$
\begin{eqnarray}
b = \bar{y} – \bar{x} \frac{\frac{1}{n}\sum^n_{i} x_i y_i-\bar{x}\bar{y}}{\frac{1}{n}\sum^n_{i} x_i^2 – \bar{x}^2}
\end{eqnarray}
$$

\(a\)と\(b\)を求めることができました。

参考文献

イメージでつかむ機械学習入門 ~豊富なグラフ,シンプルな数学,Rで理解する~

コメント

タイトルとURLをコピーしました