鳥の巣箱

ネトゲしたり、機械いじったり、ソフト書いたり、山篭ったり、ギャンブルしたりする人

最小二乗法の考え方と導出

データ配列として(x_1,y_1),(x_2,y_2),(x_3,y_3)...(x_n,y_n)というデータがあったとして、
これらのデータを1次関数の式 \displaystyle y=ax+bという形で表現したいとしたときの傾き \displaystyle aと切片 \displaystyle bはどう求めればいいのだろうか。

最小二乗法の考え方

 \displaystyle y=ax+bと仮定したときの \displaystyle x_iでの値は \displaystyle y=ax_i+bであるが、実際の値 \displaystyle y_iとは幾分かの誤差が生じるはず。
その差は \displaystyle y_i-ax_i-bと表現できる。この差はマイナス方向にもプラス方向にもズレが起きうると考え、どれだけの量がずれたかを調べるには2乗してやればいい。
つまり、 \displaystyle (y_i-ax_i-b)^2と表現できる。

n個のデータに対してズレの評価をすべて行い、総和を求める。
 \displaystyle ε(a,b)=\sum_{i=0}^n (y_i-ax_i-b)^2
このときのε(a,b)が最小となるa,bを求めることができれば、もっとも近い1次関数の式に近似できる。
というのが最小二乗法の考え方。

導出してみる

ε(a,b)は2変数の2次関数となっている。
2次関数の最小値を求める方法は、微分した関数の値が0になる点を求めればいい。
例えば、 \displaystyle y=x^2の最小値はy微分して \displaystyle y'=2xとし、y'=0となるxを求めればよい。つまりx=0の時である。
今回扱う関数は変数にa,bをもつ2変数関数であるため、それぞれa,b偏微分する必要がある。

まずaについて微分する。
 \displaystyle \frac{\partial ε(a,b)}{\partial a}=-2\sum_{i=0}^n x_i(y_i-ax_i-b)
つぎにbについて微分する。
 \displaystyle \frac{\partial ε(a,b)}{\partial b}=-2\sum_{i=0}^n (y_i-ax_i-b)
これらが0になるように連立方程式を解けばいい。つまり
{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
      \displaystyle -2\sum_{i=0}^n x_i(y_i-ax_i-b)=0\\
     \displaystyle -2\sum_{i=0}^n (y_i-ax_i-b)=0
    \end{array}
  \right.
\end{eqnarray}
}
上式をそれぞれ変形する。
{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
      \displaystyle \sum_{i=0}^n ({x_i}{y_i}+ax_i^2+bx_i)=0\\
     \displaystyle \sum_{i=0}^n (y_i+ax_i+b)=0
    \end{array}
  \right.
\end{eqnarray}
}
{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
      \displaystyle a\sum_{i=0}^n x_i^2+b\sum_{i=0}^n x_i = \sum_{i=0}^n x_iy_i\\
      \displaystyle a\sum_{i=0}^n x_i +bn=\sum_{i=0}^ny_i
    \end{array}
  \right.
\end{eqnarray}
}
ここで2式の両辺をnで割る。
{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
      \displaystyle a\frac{\displaystyle\sum_{i=0}^n x_i^2}{n}+b\frac{\displaystyle\sum_{i=0}^n x_i}{n} = \frac{\displaystyle\sum_{i=0}^n x_iy_i}{n}\\
      \displaystyle a\frac{\displaystyle\sum_{i=0}^n x_i}{n} +\frac{bn}{n}=\frac{\displaystyle\sum_{i=0}^ny_i}{n}
    \end{array}
  \right.
\end{eqnarray}
}
ここで、 \displaystyle \sum_{i=0}^nをnで割るということは、平均を取る行為に等しいので
{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
      a\bar{x^2}+b\bar{x} = \bar{xy}\\
      a\bar{x}+b=\bar{y}
    \end{array}
  \right.
\end{eqnarray}
}
この2式で連立方程式をとき、それぞれa,bを求めると
{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
      a\bar{x^2}+b\bar{x} = \bar{xy}\\
      b=-a\bar{x}+\bar{y}
    \end{array}
  \right.
\end{eqnarray}
}
代入して
\displaystyle a\bar{x^2}+(-a\bar{x}+\bar{y})\bar{x}=\bar{xy}
\displaystyle a\bar{x^2}-a\bar{x}^2+\bar{y}\bar{x}=\bar{xy}
aについて変形する。
\displaystyle a(\bar{x^2}-\bar{x}^2)=\bar{xy}-\bar{x}\bar{y}
\displaystyle a=\frac{\bar{xy}-\bar{x}\bar{y}}{\bar{x^2}-\bar{x}^2}

よって、近似直線y=ax+bとしたとき、y_n=ax_n+bと最も剥離が少ないa,b
\displaystyle a=\frac{\bar{xy}-\bar{x}\bar{y}}{\bar{x^2}-\bar{x}^2}
\displaystyle b=-a\bar{x}+\bar{y}
で求めることができる。

余談

さっき導出した式をみてみる。
\displaystyle a=\frac{\bar{xy}-\bar{x}\bar{y}}{\bar{x^2}-\bar{x}^2}

これの右辺に注目すると、分子はx,yの共分散で分母はxの標本分散となっている。
x_1,x_2,x_3...x_nというデータの標本分散s^2
\displaystyle s^2=\frac{\displaystyle \sum_{i=0}^n (x_i-\bar{x})^2}{n}
\displaystyle s^2 =\bar{x^2}-\bar{x}^2

(x_1,y_1),(x_2,y_2),(x_3,y_3)...(x_n,y_n)というデータの共分散s_{xy}
\displaystyle s_{xy}=\frac{\displaystyle \sum_{i=0}^n (x_i-\bar{x})(y_i-\bar{y})}{n}
\displaystyle s_{xy}=\bar{xy}-\bar{x}\bar{y}
つまり、共分散を分散で割ることでも傾きは求めることができる。

2次関数での近似はこちら
birdhouse.hateblo.jp