Principal Component Analysis (PCA)、Singular Value Decomposition (SVD)、およびLanczosアルゴリズム
概要
Lanczos アルゴリズムについて調べる際に、固有値ベクトルなどを計算するための行列の低ランクへの分解である、
ということを知りました。
その時にいろいろな手法を比べてプログラムで動作を確認しました。
このときに、
SVDも行列の分解であったなあと思い出し、さらに、
低ランクという文脈では、次元削減であるPCAを思い出しますよね。
次元削減ではよく聞くPCA、SVD、
また、Lanczosアルゴリズムについてどのような関連性を持って理解しておけば良いのか混乱したため、
調べたことをいかに備忘録としてまとめておこうと思います。
調べていくと、やはり
PCA(主成分分析)、SVD(特異値分解)、およびLanczosアルゴリズムは、
線形代数と次元削減の文脈で関連しています。
ここでは、これらの関連性について説明します。
忙しい人のためのまとめ
PCA(主成分分析)
- PCAとは何か
- PCAの数学的背後にあるSVDの関連性
SVD(特異値分解)
- SVDの概要
- SVDとPCAの関係
Lanczosアルゴリズム
- Lanczosアルゴリズムの特徴
- Lanczosアルゴリズムを使用したPCA
内容
PCAとは何か
PCAはデータの次元削減とデータ圧縮に使用され、データセットの最大分散を捉える直交ベクトルである主成分を特定します。
具体的には、PCAは共分散行列を固有値分解することで固有ベクトルを計算し、固有ベクトルをもともとの次元数より小さく選んで線形変換をすれば、次元削減ができます。
この記事が非常にわかりやすかったです。
PCAの数学的背後にあるSVDの関連性
PCAはSVDの特殊なケースと見なすことができ、
データ行列Xに対してPCAを実行すると、Xの共分散行列の固有ベクトル(主成分)を見つけていることになりますが、この固有値とSVDの特異値の間には関係式があります。
これも上の記事にまとめられていました。
SVDの概要
SVDは行列を他の3つの行列に分解するための因子分解法であり、行列Aが与えられた場合、SVDはそれをA = UΣV^Tと表します。
UとVは直交行列で、Σは対角行列であり、その対角線上に特異値があります。
SVDとPCAの関係
特異値とUとVの対応する列は、行列A^TA(ここでA^TはAの転置です)の固有値と固有ベクトルと密接に関連しており、これによりデータ行列X上でSVDを実行してPCAを計算できます。
こちらに詳しい手順が載っていますが、
PCAとの違いは、固有値や固有ベクトルを求める対象が、
共分散行列か、もしくはX^TX に対してか、の違いですね。
Lanczosアルゴリズムの特徴
Lanczosアルゴリズムは、大規模な対称行列の極端な固有値とそれらに対応する固有ベクトルをいくつか見つけるための反復的な数値方法です。
Lanczosアルゴリズムを使用したPCA
PCAの文脈で、大規模なデータセットを持ち、主成分(固有ベクトル)の一部のみを計算したい場合、Lanczosアルゴリズムを用いると、
効率的に大規模データセットの特定数の固有ベクトルや固有値を算出することができます。
まとめ
PCA、SVD、およびLanczosアルゴリズムの関係性は、行列の固有ベクトルと固有値に共通しています。
PCAはSVDを使用して計算でき、
Lanczosアルゴリズムは大規模なPCAのアプリケーションにおいて役立つ一部の固有ベクトルを効率的に計算するときに使える様です。
今回はこの辺がふわっと理解できた位にとどめておきます。
今回はこの辺で。