最小二乗法と疑似逆行列,特異値分解の関係

[]で囲ってる部分はあとから図を追加する予定です.

簡単のため1次元データについて考えてみます.

スポンサーリンク

最小二乗法による1次元の線形回帰の場合

得られたデータ点の組み合わせ\((a_i,b_i), i=1,\dots,N\)を原点を通る直線で回帰することは

$$b=xa$$

という直線の中でデータ点をうまく説明する\(x\)という傾きを見つけることに等しいです.

‘‘うまく説明する”という基準としては最小二乗法というものがよく用いられます.最小二乗法では直線からデータ点までの距離の差の二乗を一番小さくする\(x\)がデータ点を最もうまく説明すると考える方法です.

[最小二乗法の図,縦方向の距離であることを示す]

直線からデータ点までの距離の差の二乗を\(S\)とすると

$$S=\sum_{i=1}^N(b_i – xa_i)^2$$

となります.

これを最小化するような\(x\)を計算するためには\(x\)で微分します.なぜなら,\(S\)は二次関数で下に凸なので微分したとき0になる点で\(S\)が最小値を持つからです.

[下に凸の図]

\(S\)を微分すると

$$\frac{dS}{dx}=\sum_{i=1}^N-2a_i (b_i – xa_i)$$

\(S\)の微分が0になる傾きは

\begin{align}
\frac{dS}{dx}&=0\\
\sum_{i=1}^N-2a_i (b_i – xa_i)&=0\\
\sum_{i=1}^N a_i b_i – x\sum_{i=1}^N a_i^2&=0\\
x\sum_{i=1}^N a_i^2&=\sum_{i=1}^N a_i b_i\\
x&=\frac{\sum_{i=1}^N a_i b_i}{\sum_{i=1}^N a_i^2}
\end{align}

つまりデータ点を原点を通る直線で近似したときにデータ点を最小二乗法の基準で最もよく表す傾きは\(a_i b_i\)を足したものを\(a_i\)の二乗の和で割ったものになることがわかります.

スポンサーリンク

擬似逆行列による1次元データに対する線形フィット

先ほどと同じように\((a_i,b_i), i=1,\dots,N\)というデータがあるとき,

$$A = \left[
\begin{array}{c}
a_1\\
a_2\\
\vdots\\
a_N
\end{array}
\right],
B = \left[
\begin{array}{c}
b_1\\
b_2\\
\vdots\\
b_N
\end{array}
\right]
$$

とすると\(B=Ax\)と書けます.

もし,Aが正方行列かつ正則で逆行列を持つならば\(x=A^{-1}B\)として計算することができますが,今回はAが正方行列ではないため逆行列\(A^{-1}\)を使って計算することができません.

このようなとき逆行列の代わりに使用されるのが疑似逆行列です.疑似逆行列は正方行列でない行列\(A\)に対して,転置もしくは複素共役転置行列\(A^*\)を左からかけることで\(A^* B=A^* A x\)の形にし,\(A^* A\)という正方行列の逆行列を左からかけることで

\begin{align}
x&=(A^* A)^{-1}A^* B\\
x&=\frac{\sum_{i=1}^N a_i b_i}{\sum_{i=1}^N a_i^2}
\end{align}

1次元の場合は疑似逆行列も簡単に計算できて,最小二乗法を使用した時と同じ解になることがわかります.(*)は複素共役転置ですが,実数のみの行列を扱う場合はただの転置と同じです.

補足:今回のように\(A\)が1次元のデータの場合\(A^* A=\sum_{i=1}^N a_i^2\)なので\((A^* A)^{-1}=\frac{1}{\sum_{i=1}^N a_i^2}\)となります.\(n\times1\)の行列の擬似逆行列は\(A^* A\)がスカラーになるため割り算して1になる値なので簡単に求めることができますね.

特異値分解を1次元のデータに適応して未知数を求めた場合

特異値分解は行列Aを特異値行列と2つのユニタリー行列に分解する手法ですが疑似逆行列とも深い関係があります.
\((A^*A)^{-1}\)を計算する代わりに特異値分解を用いて未知数\(x\)を求めてみます.

行列\(A\)を特異値分解すると

$$A=\tilde{U}\tilde{\Sigma}\tilde{V}^*$$

と分解できます.このとき\(\tilde{U}\), \(\tilde{V}\)はユニタリー行列,つまり回転を表す行列.\(\tilde{\Sigma}\)は特異値行列で拡大縮小を反映する行列です.
\(\tilde{U}\), \(\tilde{V}\)はユニタリー行列なので転置した行列をかけると単位行列になります.
例:\(\tilde{U}^*\tilde{U} = I\).
回転したものを同じだけ逆回転させるともとに戻るイメージです.

[U, V, Sigmaの説明をする図]

このとき\(B=Ax=\tilde{U}\tilde{\Sigma}\tilde{V}^* x\)とかけます.

また,\(A^*=\tilde{V}\tilde{\Sigma}^{-1}\tilde{U}^*\)となるので左からかけると

\begin{align}
\tilde{V}\tilde{\Sigma}^{-1}\tilde{U}^*B=\tilde{V}\tilde{\Sigma}^{-1}\tilde{U}^*\tilde{U}\tilde{\Sigma}\tilde{V}^* x\\
\tilde{V}\tilde{\Sigma}^{-1}\tilde{U}^* B= x
\end{align}

このとき

\begin{align}
A^*A V = V\Sigma^2\\
\sum_{i=1}^N a_i^2 V = V \Sigma^2
\end{align}

ここで\(\sum_{i=1}^N a_i^2\)はスカラーなので\(V=1\),\(\Sigma = \sqrt{\sum_{i=1}^N a_i^2}\)が条件を満たすことがわかります.

このとき\(\tilde{U}\)は

\begin{align}
\tilde{U} = A\tilde{V}\tilde{\Sigma}^{-1}\\
\tilde{U} = \frac{1}{\sqrt{\sum_{i=1}^N a_i^2}} A
\end{align}

よって

\begin{align}
x &= \tilde{V}\tilde{\Sigma}^{-1}\tilde{U}^* B\\
x &= 1 \times \frac{1}{\sqrt{\sum_{i=1}^N a_i^2}} \times \frac{1}{\sqrt{\sum_{i=1}^N a_i^2}} A^* B\\
x &=\frac{\sum_{i=1}^N a_i b_i}{\sum_{i=1}^N a_i^2}
\end{align}

となり,最小二乗法と疑似逆行列,特異値分解を利用した\(x\)の解は同じになります.

まとめ:最小二乗法と疑似逆行列,特異値分解による連立方程式の解き方は一見異なるが実は同じことをしている

コメント

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