統計とそのさまざまなアプリケーションでは、さまざまな用途で共分散行列を計算することがよくあります。場合によっては、さまざまな計算のためにこの行列の逆行列が必要になります(たとえば、この逆行列を(唯一の)中心行列とする2次形式)。このマトリックスの品質と使用目的を考えると、私は疑問に思います:
数値安定性の観点から、この逆を計算または使用する方法(2次形式または一般的な行列ベクトル乗算の場合)の最良の方法は何ですか?便利になる可能性のある因数分解?
統計とそのさまざまなアプリケーションでは、さまざまな用途で共分散行列を計算することがよくあります。場合によっては、さまざまな計算のためにこの行列の逆行列が必要になります(たとえば、この逆行列を(唯一の)中心行列とする2次形式)。このマトリックスの品質と使用目的を考えると、私は疑問に思います:
数値安定性の観点から、この逆を計算または使用する方法(2次形式または一般的な行列ベクトル乗算の場合)の最良の方法は何ですか?便利になる可能性のある因数分解?
回答:
コレスキー分解は、上三角行列S = R − 1で逆C − 1 = S S Tのコレスキー様分解になります。
実際には、逆因数分解を維持することが最善です。がスパースの場合、行列ベクトル積y = C − 1 xは2つの三角システムR T z = xおよびR y = zを解くことで計算できるため、通常はSを暗黙的に維持することをお勧めします。
共分散行列は正の半正対称対称行列になるため、共分散行列を操作している場合、コレスキー分解は最適な安定性と速度を実現するのに最も有効です。コレスキーはここで自然です。しかし...
コレスキー分解を計算する予定がある場合は、共分散行列を計算する前に、自分で好意的です。行列のQR分解を計算することにより、問題を最大限に安定させます。(QRも高速です。)つまり、共分散行列を次のように計算する場合
どこ取り除か列手段を持っていた、そのフォームを参照Cを、それ正方形条件数を。A T Aのコレスキー分解を明示的に計算するよりも、AのQR因子を形成する方が良いのです。
Qは直交なので、
したがって、コレスキー因子を形式でQR分解から直接取得します。場合Q -less QR因数分解が利用可能である必要がないので、これはさらに良いですQを。A Q以来-less QRは、コンピューティングへの高速なものであるQが生成されることはありません。それは単にHouseholder変換のシーケンスになります。(列がピボットされ、QなしのQRは論理的にさらに安定しますが、ピボットを選択するための余分な作業が必要になります。)
ここでQRを使用する大きな利点は、厄介な問題に対して数値的に非常に安定していることです。繰り返しますが、これはコレスキー因子を計算するために共分散行列を直接作成する必要がなかったためです。製品を形成するとすぐに、マトリックスの条件番号を二乗します。事実上、元々情報がほとんどなかったマトリックスの部分の情報が失われます。
最後に、別の応答が指摘しているように、逆行列を計算して保存する必要はまったくありませんが、逆に三角システムのバックソルブの形式で暗黙的に使用します。
mathSEからの提案を使用して、最近これを初めて行いました。
SVDは私が考えるほとんどの人に推奨されましたが、コレスキーのシンプルさを選択しました。
行列場合、私は分解Mを三角行列にLように、コレスキーを使用して、M = L L ⊤。次に、(Lを上三角にするか下三角にするかに応じて)backsubstitutionまたはforwardsubstitutionを使用して、Lを反転し、L - 1を持ちます。このことから、私はすぐに計算することができますM - 1 = ( LのL ⊤ ) - 1 = L - ⊤ L - 1。
皮切りに:
コレスキー分解:
逆置換:
乗算:
私のコレスキーアルゴリズム(おそらくNumerical RecipesまたはWikipediaから)
これはほぼインプレースで実行できます(対角要素、アキュムレータ、および整数イテレータの一時的なストレージのみが必要です)。
私の後方置換アルゴリズム(数値レシピから、LaTeXマークアップで間違いを犯した可能性があるため、バージョンを確認してください)
行列に逆行列があることがわかっている場合(つまり、正定行列である場合)、大きすぎない場合、コレスキー分解は行列の逆行列を特徴付ける適切な手段を提供します。