線形モデルの逆解析 ー SVDを用いた低ランク近似
逆問題では観測誤差により逆過程で求めた解が大きくばらつく誤差鋭敏性が起きます。
誤差鋭敏性を抑える手法として特異値分解(Singular Value Decomposition; SVD)を用いた低ランク近似手法の説明と実装方法を紹介します。
特異値と誤差鋭敏性の関係
SVDは行列分解の一手法です。正方行列に限らず任意の形の行列を分解できます。 行列
SVDは行列
逆解析は出力空間上の観測値ベクトルの逆像を求めることですが、観測誤差は実数空間上に任意のベクトルをとるため逆像は入力空間からはみ出してしまいます。
特異値が小さな特異ベクトルでは出力空間上の観測誤差に特異値の逆数が掛け合わされるため、解が大きくばらついてしまいます。
これが誤差鋭敏性です。
観測誤差を
誤差鋭敏性は小さな特異値を削除する低ランク近似、あるいは大きくするチホノフ正則化により抑えられます。
ちなみに順過程で逆解析すると特異値の逆数が掛け合わされないため誤差鋭敏性は生じません。
計算量が大きくても構わないのであればグリッドサーチで逆解析するのが正確です。
SVDを用いた低ランク近似
偏回帰係数
u, s, vh = np.linalg.svd(A)
# 0.01以上のランクを求めます。
r = np.linalg.matrix_rank(np.diag(s), tol=0.01)
ur = u[:, r]
sr = s[:r]
vhr = vh[:r, :]
# 低ランク近似をした行列
Ar = np.matmul(ur, np.multiply(sr[..., np.newaxis], vhr))
# 低ランク近似をした一般逆行列
Ard = np.matmul(vhr.T, np.multiply(1/sr[..., np.newaxis], ur_T))
観測値
まとめ
SVDを用いた低ランク近似手法を紹介しました。低ランク近似は小さな特異値成分をバッサリ切れるのがメリットです。一方で基準が明確でないため切り過ぎてしまう、あるいは足りないことがあります。なので低ランク近似で特異値が小さすぎる成分を粗く切っておき、次に紹介するチホノフ正則化で微調整をするとうまくいきます。
Discussion