最小二乗法

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
データセットを4次関数で最小二乗近似した例

最小二乗法(さいしょうにじょうほう、さいしょうじじょうほう;最小自乗法とも書く、: least squares method)は、測定で得られた数値の組を、適当なモデルから想定される1次関数対数曲線など特定の関数を用いて近似するときに、想定する関数が測定値に対してよい近似となるように、残差の二乗和を最小とするような係数を決定する方法、あるいはそのような方法によって近似を行うことである。

歴史[編集]

1805年アドリアン=マリ・ルジャンドルが出版したのが初出である。しかし、1809年カール・フリードリヒ・ガウスが出版した際に1795年から最小二乗法を保持していたと主張したことで、最小二乗法の発明者が誰であるかについては長い間論争になっている。

計算の概要[編集]

前提条件[編集]

最小二乗法では測定データy はモデル関数f (x )と誤差εの和で

y=f(x)+\epsilon

と表せるとする。物理現象の測定データには、誤差が含まれ、それは系統誤差と偶然誤差を含んでいる。この内、偶然誤差は、測定における信号経路の微視的現象に由来するならば、正規分布であると期待されることが多い。また、社会調査などの誤差理由の特定が困難な場合でも誤差が正規分布になると期待する考え方もある。

誤差が正規分布に従わない場合、最小二乗法によって得られたモデル関数は尤もらしくないことに注意する必要がある。偶然誤差が正規分布していない場合、系統誤差が無視できない位大きくそれをモデル関数に含めていない場合、測定データに正規分布から大きく外れた外れ値を含む場合などが該当する。

上記を含め、最小二乗法の理論的基盤には次のような前提が設けられている[1]

  • 測定値の誤差には偏りがない。すなわち誤差の平均値は 0 である。
  • 測定値の誤差の分散は既知である。ただし測定データごとに異なる値でも良い[2]
  • 各測定は互いに独立であり、誤差の共分散は 0 である。
  • 誤差は正規分布する。
  • m[3]のパラメータ(フィッティングパラメータ)を含むモデル関数f が知られていて、測定量の真の値を近似誤差なく再現することのできるパラメータが存在する。

基礎的な考え方[編集]

話を簡単にするため、測定値は x, y の二次元の平面に分布するものとし、想定される分布(モデル関数)が y = f(x) の形である場合を述べる。想定している関数 f は、既知の関数 g(x) の線型結合で表されていると仮定する。すなわち、

f(x)=\sum_{k=1}^{m} a_k g_k(x)

例えば、gk(x)=xk-1 は、多項式近似であり、特に m=2 の時は f(x)= a_1 + a_2 x という直線による近似(線形回帰)になる。

今、測定で得られた、次のような数値の組の集合があるとする。

(x, y) = (x_1, y_1), (x_2, y_2), \ldots , (x_n, y_n)

これら (x, y) の分布が、y = f(x) というモデル関数に従うと仮定した時、想定される理論値は (x1, f(x1)), (x2, f(x2)), ..., (xn, f(xn)) ということになり、実際の測定値との残差は、各 i につき |yi - f(xi)| ということになる。 この残差の大きさは、xy-平面上での (xi, yi) と (xi, f(xi)) との距離でもある。

ここで、理論値からの誤差の分散の推定値は残差の平方和

J = \sum_{i=1}^n (y_i - f(x_i))^2

で与えられるから、J が最小になるように想定分布 f を(すなわち akを)、定めればよいということになる。

それには、上式は ak を変数とする関数と見なすことができるので、Jak について偏微分したものをゼロと置く。こうして得られた m 個の連立方程式(正規方程式)を解き、ak を決定すればよい。

一次方程式の場合[編集]

さらに簡単な例として、モデル関数を1次関数とし、

f(x)=ax+b\,

とおくと、ab は次式で求められる。

a=\frac{\displaystyle n\sum_{k=1}^n x_ky_k-\sum_{k=1}^n x_k\sum_{k=1}^n y_k}{\displaystyle n\sum_{k=1}^n x^2_k-\left( \sum_{k=1}^n x_k \right)^2}

b=\frac{\displaystyle \sum_{k=1}^n x^2_k\sum_{k=1}^n y_k-\sum_{k=1}^n x_ky_k\sum_{k=1}^n x_k}{\displaystyle n\sum_{k=1}^n x^2_k-\left( \sum_{k=1}^n x_k \right)^2}

解法例[編集]

当てはめたい関数 f は、

f(x)= (g_1(x), g_2(x), \ldots, g_m(x))(a_1, a_2, \ldots, a_m)^\textrm{T}

と表すことができる。上付き添字 T は転置行列を表す。最小にすべき関数 J


\begin{align}
J (\boldsymbol{a}) &= (G \boldsymbol{a}-\boldsymbol{y})^\textrm{T} \, (G \boldsymbol{a}-\boldsymbol{y}) \\
&= (\begin{bmatrix} G & \boldsymbol{y} \end{bmatrix} \begin{bmatrix}  \boldsymbol{a}\\ -1\end{bmatrix} )^\textrm{T} \, (\begin{bmatrix} G & \boldsymbol{y} \end{bmatrix} \begin{bmatrix}  \boldsymbol{a}\\ -1\end{bmatrix} )
\end{align}

と表される。ここにG は、G_{ij} = g_j(x_i) なる成分を持つn×m行列、 \boldsymbol{y}=(y_1, y_2, \ldots, y_n)^\textrm{T}、係数\boldsymbol{a}=(a_1, a_2, \ldots, a_m)^\textrm{T} である。

これの最小解\boldsymbol{a}は、\begin{bmatrix} G & \boldsymbol{y} \end{bmatrix} ^\textrm{T} \begin{bmatrix} G & \boldsymbol{y} \end{bmatrix}  = \tilde{R}^\textrm{T} \tilde{R}を満たす上三角行列\tilde{R}の計算を経て[4]、解\boldsymbol{a}を得ることができ、全体の計算量に無駄が少ない。下記の表式を用いると\tilde{R} = \begin{bmatrix} R  & Q^\textrm{T} \boldsymbol{y} \\ \boldsymbol{0}^\textrm{T} & \alpha \end{bmatrix} が得られ、R \boldsymbol{a}= Q^\textrm{T} \boldsymbol{y}から係数解\boldsymbol{a}を求める[5]

また前節で述べたように J\boldsymbol{a}のそれぞれの成分で偏微分してゼロと置いた m 個の式(正規方程式)は行列を用いて、

G^\textrm{T} G \boldsymbol{a}= G^\textrm{T} \boldsymbol{y}

と表される。これを正規方程式 (normal equation) と呼ぶ。この正規方程式を解けば係数解\boldsymbol{a}が求まる。

係数解\boldsymbol{a}の解法には以下のようないくつかの方法がある。

  • 逆行列で正規方程式を解く
    行列 GT G正則行列(つまりフルランク)である場合は、解\boldsymbol{a} = (G^\textrm{T} G)^{-1} G^\textrm{T} \boldsymbol{y}は一意に求まる。ただしGT G の逆行列を明示的に求めることは通常は良い方法ではない。
計算量が小さい方法としてコレスキー分解G^\textrm{T} G = R^\textrm{T} RRm×m三角行列)による三角行列分解を経て、最終的にR \boldsymbol{a}= R^{-\textrm{T}} G^\textrm{T} \boldsymbol{y}を解けばよい。
数値的安定性確保のためには、積 GT G を経ない三角行列分解が良い。すなわち以下と同じくQR分解(直交分解)によるG = Q Rから、R \boldsymbol{a}= Q^\textrm{T} \boldsymbol{y}を解く。
  • 直交分解で正規方程式を解く
    コレスキー分解の方法よりも計算量が大きいが、数値的に安定かつ汎用な方法として、QR分解特異値分解 (SVD) を用いる方法がある。これらの方法では計算の過程で積 GT G を必要としないため数値的安定性が高い。また GT G が正則行列でない(ランク落ちしている)場合は正規方程式の解が不定となるが、その場合でも、これらの手法では解 a のうちノルムが最も小さいものを求めることができる。特異値分解を用いる場合は、特異値のうち極めて小さい値を0とみなして計算することで数値計算上の大きな誤差の発生を防ぐことができる (truncated SVD)。
  • 疑似逆行列を使う方法もあるが、計算効率が悪いため特殊な場合(解析的な数式が必要な場合など)を除いてあまり用いられない。

拡張[編集]

多次元[編集]

想定される分布が媒介変数 t を用いて (x, y) = (f(t), g(t)) の形(あるいは f, g は複数の媒介変数によって決まるとしても同様)であっても考察される。

すなわち、測定値 (xi, yi) がパラメータ ti に対する (f(ti), g(ti)) を理論値として近似されているものと考えるのである。

この場合、各点の理論値 (f(ti), g(ti)) と測定値 (xi, yi) の間に生じる残差は

\sqrt{(x_i - f(t_i))^2 + (y_i - g(t_i))^2}

である。故に、残差平方和

\sum_{i=1}^{n}\left\{(x_i - f(t_i))^2 + (y_i -g(t_i))^2\right\}

となるから、この値が最小であるように、f, g を決定するのである。

このように、n 組の (x , y ) の測定値 (xi , yi ) (i = 1, 2, ... , n ) をn 組の (x1 , x2 , ... , xm ) の測定値 (x1i , x2i , ... , xmi ) (i = 1, 2, ... , n ) に拡張したものも考察することができる。

測定の誤差が既知の場合[編集]

n 回の測定における誤差があらかじめ分かっている場合を考える。異なる測定方法で測定した複数のデータ列を結合する場合などでは、測定ごとに誤差が異なることはしばしばある。誤差が正規分布していると考え、その標準偏差  \sigma_i (i=1,2,\ldots,n ) で、誤差の大きさを表す。すると、誤差が大きい測定より、誤差が小さい測定の結果により重みをつけて近似関数を与えるべきであるから、

J'= \sum_{i=1}^n \frac{(y_i - f(x_i))^2}{\sigma_i^2}

を、最小にするように f を定める方がより正確な近似を与える。

毎回の測定が独立ならば、測定値の尤度は exp(-J') に比例する。そこで、上記の J' を最小にする f は、最尤推定値であるとも解釈できる。また、J'自由度 n-mカイ二乗分布に従うので、それを用いてモデル f の妥当性を検定することもできる。

毎回の測定誤差が同じ場合、J' を最小にするのは J を最小にするのと同じ意味になる。

非線型最小二乗法[編集]

もし、f が、ak の線型結合で表されないときは、正規方程式を用いた解法は使えず、反復解法を用いて数値的に ak の近似値を求める必要がある。例えば、ガウス・ニュートン法Levenberg-Marquardt法英語版が用いられる。とくにLevenberg-Marquardt法は多くの多次元非線形関数でパラメータを発散させずに効率よく収束させる(探索する)方法として知られている。

異常値の除去[編集]

前提条件の節で述べたように、測定データを最小二乗法によって近似する場合、外れ値または異常値が含まれていると極端に近似の尤もらしさが低下することがある。また、様々な要因によって異常値を含む測定はしばしば得られるものである。

誤差が正規分布から極端に外れた異常値を取り除くための方法として修正トンプソン-τ法が用いられる。

脚注[編集]

  1. ^ 中川徹; 小柳義夫 『最小二乗法による実験データ解析』 東京大学出版会、1982年、30頁。ISBN 4-13-064067-4 
  2. ^ この前提は以下のように緩められることが多い:測定値の誤差の分散は、測定値間での相対比は既知であるが、絶対値を決める比例定数一つが未知である。
  3. ^ m は、測定データの数よりも小さいとする。
  4. ^ \begin{bmatrix} G & \boldsymbol{y} \end{bmatrix} ^\textrm{T} \begin{bmatrix} G & \boldsymbol{y} \end{bmatrix}  = \tilde{R}_1^\textrm{T} \tilde{R}_2を満たすLU分解で上三角行列を得ても良く、その\tilde{R}_1を使っても\tilde{R}_2を使っても、係数解\boldsymbol{a}を計算できる。
  5. ^ \alpha^2 = \min J (\boldsymbol{a})G^\textrm{T} Gは正則行列と仮定。

関連項目[編集]