正規直交基底を作る
正規直交な列は、行列が持ちうる最も扱いやすい列です。QTQ=I なので Q は長さと角度を保ち、誤差を拡大しません。グラム・シュミット法は、任意の独立な列 a1,…,an を正規直交な列に変えます。q1=a1/∥a1∥ とし、次の列からは、すでに得た q への射影を引いて、残りを正規化します。
A=QR,Rij=qi⋅aj (i≤j),qj=Rjjaj−∑i<jRijqi(1) 使った数を記録するとQR分解になります。Q は正規直交な列を持ち、R は上三角行列で、Rij=qi⋅aj、対角成分は長さ Rjj です。最小二乗では、∥Ax−b∥=∥QRx−b∥ を Rx^=QTb が最小にします。これは三角系で、後退代入で解け、ATA を一度も作りません。そのため条件数は κ(A)2 ではなく κ(R)=κ(A) です。
2列へのグラム・シュミット法A=(3412)、列は
a1=(3,4) と
a2=(1,2) とします。
R11=∥a1∥=5、
q1=(0.6,0.8)。次に
R12=q1⋅a2=2.2 で、
a2−2.2q1=(−0.32,0.24) の長さが
R22=0.4 なので
q2=(−0.8,0.6)。よって
Q=(0.60.8−0.80.6)、
R=(502.20.4)。確認:
detA=2=detR。
- Q:正規直交な列、QTQ=I。誤差は拡大されない。
- R:上三角行列。対角成分は、前の方向を取り除いた後に残る長さ。
- 修正グラム・シュミット法(ライブラリではハウスホルダー反射)は浮動小数点でも Q の直交性を保つ。教科書版は、ほぼ従属な列で直交性を失う。
ライブラリが回帰にQR分解を使う理由金融の回帰変数はほぼ共線になりがちです(相関の強い多数のファクター、多項式の項)。正規方程式はその条件数を2乗し、何も知らせずに無意味な値を返しますが、QR分解(やSVD)なら対処できます。これがNumPyやstatsmodelsの最小二乗ルーチンの裏にあるアルゴリズムで、総仕上げで皆さんが実装するものです。
ラボ:採点される内容
- 最初の対角成分10点
- 行列 Q20点
- 行列 R20点
- R から行列式を求める15点
- QR分解による最小二乗15点
- QR分解の精度が高い理由20点