最小二乗法の行列による計算法


     最小二乗法の計算はいろいろの場面で使ってきたが,原理とかあまり考えたことが無かったのでまとめてみた。 一次方程式が解ければあとは応用が効くと思うので,ここでは次の簡単な式で考えてみる。

    \(y = a1 + a2・x \)

    x,yの数組のデータが与えられて,最適なa1とa2を最小二乗法でもとめる問題である。
    この式から次の誤差方程式ができる。

    \(V = a1 + a2・x - y \) --- (1)

    この式から最小二乗法により次の2つの方程式が得られる。

    \(\displaystyle \frac{\partial ΣV^2}{\partial a1} = 0 \) --- (2)
    \(\displaystyle \frac{\partial ΣV^2}{\partial a2} = 0 \) --- (3)

    (2)式を展開すると以下となる。
    \(\displaystyle \frac{\partial ΣV^2}{\partial a1} =\) \(\displaystyle \frac{\partial Σ( a1 + a2・x - y)^2}{\partial a1} \) \( = Σ 2(a1 + a2・x - y )= 0 \) --- (4)

    同様に(3)式より,
    \(\displaystyle \frac{\partial ΣV^2}{\partial a2} =\) \(\displaystyle \frac{\partial Σ( a1 + a2・x - y)^2}{\partial a2} \) \( = Σ 2x(a1 + a2・x - y )= 0 \) --- (5)

    (4),(5)式は以下の行列式を意味する。定数の2は式全てにかけてあるので省略した。
    \( \left(\begin{array}{ccc} Σ1 & Σx \\ Σx & Σx^2 \end{array}\right) \left(\begin{array}{cc} a1 \\ a2 \end{array}\right) =\left(\begin{array}{cc} Σy \\ Σxy \end{array}\right) \) --- (6)

    これは2元1次の方程式なので、この行列式を解くことでa1,a2が求まる。
    また,形からa3,a4と増えた場合は,行と列が増え,xの次数も上がっていくことが分かる。

    【例題】次のデータでy=a1+a2・xのa1とa2をもとめる。

      x y
      0 0.9
      5 4.3
      10 6.5
      15 10.3
    各項目を計算すると以下の行列式となる。

    \( \left(\begin{array}{ccc} 4 & 30 \\ 30 & 350 \end{array}\right) \left(\begin{array}{cc} a1 \\ a2 \end{array}\right) =\left(\begin{array}{cc} 22.0 \\ 241.0 \end{array}\right) \) --- (7)

    これを解くと,a1=0.940,a2=0.608が得られる。この値で計算し誤差を計算すると以下となる。

      x y 計算値 誤差
      0 0.9 0.94 -0.04
      5 4.3 3.98 0.32
      10 6.5 7.02 -0.52
      15 10.3 10.06 0.24
    誤差の2乗和は0.432となる。2個係数を決めたので誤差の偏差は以下となる。
    \( s^2 = 0.432/(4-2) = 0.216 \) 
    \( s = 0.465 \) --- (8)

    また,a1,a2の誤差の偏差は以下で計算できる。a1の場合,以下の行列の解を求める。

    \( \left(\begin{array}{ccc} 4 & 30 \\ 30 & 350 \end{array}\right) \left(\begin{array}{cc} a1 \\ a2 \end{array}\right) =\left(\begin{array}{cc} 1.0 \\ 0.0 \end{array}\right) \) --- (9)

    この行列のa1の解はa1=0.70。これによりa1の誤差の偏差は以下で計算する。
    a1誤差の偏差\(=s*\sqrt{a1}=s*\sqrt{0.7}\)=0.465x 0.837=0.389
    同様にa2は次の行列で計算すると,a2=0.008となるので同様に,
    a2誤差の偏差\(=s*\sqrt{a2}=s*\sqrt{0.008}\)=0.465x 0.0894=0.04159

    \( \left(\begin{array}{ccc} 4 & 30 \\ 30 & 350 \end{array}\right) \left(\begin{array}{cc} a1 \\ a2 \end{array}\right) =\left(\begin{array}{cc} 0.0 \\ 1.0 \end{array}\right) \) --- (10)

    以上により最終結果は以下となる。
    \(y = (0.94±0.39) + (0.608±0.042)x \) となる。

    この結果は『測定値誤差とデータ解析の基礎事項』p.65の計算例と同じ結果である。


2021/03/07 掲載
Copyright(C) 2020 Shinobu Takesako
All rights reserved