PCAとSVDの関係性がよくわからなかったので、調べた
はじめに
株式会社POLという会社でエンジニアをやっている @mejihabenatawa です。
昨年末に次元削減の基礎についての記事を書いたのですが、そちらでは触れなかった特徴量抽出による次元削減を調べていて、PCAとSVDの関係性がよくわからなかったので、まとめました。
現場のプロが伝える前処理技術やゼロから作る Deep Learning ②、図解でわかる多変量解析だったりを参考にしました。
前提
以前に調べた知識として、次元削減の方法としてPCAやLSAなどの手法があり、PCAには固有値問題が利用され、LSAにはSVD(特異値分解)が利用されるということは知っていました。以下にPCAとLSAをまとめます。
PCA
相関のある多数の変数から相関のない少数で全体のばらつきを最もよく表す主成分と呼ばれる変数を合成する多変量解析の一手法であり、計算する方法がいくつかある。
LSA
各文書における単語の出現回数や共起回数に基づいた行列を作成し、それを単語の意味とする。この高次元の文書の行列を,特異値分解(SVD)という線形代数的手段で低次元に縮約して、単語の空間ベクトルを作成する。
わかっていた部分とわかっていなかった部分の整理
わかっていた部分
次元削減手法の一つとして、PCAやLSAがあり、それぞれの計算方法は以下だと思っていました。
PCAの計算方法
・分散共分散行列の固有値問題をとくことによって計算
・相関行列を固有値問題をとくことによって計算
LSAの計算方法
・データ行列を特異値分解することによって計算
わかっていなかった部分
①PCAの計算方法として、上記の2つ以外にデータ行列を直接、特異値分解する方法がある
②固有値分解と特異値分解の意味的な違い
上記2点について、以下で述べます。
PCAにおける特異値分解
固有値分解は正方行列=正則行列・対角行列・正則行列という分解なので、正方行列にしか使えない
特異値分解は一般的な行列=直交行列・対角行列・直交行列という分解なので、一般的な行列に使える
そのため、PCAの上の2つの手法は観測値の分散共分散行列や相関行列などの正方行列を分解するのに対して、
特異値分解は一般的な行列を分解できるので、観測値の行列をそのまま分解するということに気づきました。
これに気づいていないせいで、固有値分解と特異値分解の違いがぐちゃぐちゃになって、混乱していました。
固有値分解と特異値分解の意味
固有値問題をとくことの意味:
分散共分散行列を固有値問題としてとくと、各固有値ラムダは変換後の分散の大きさを表すため、固有値が小さい要素を省略することで次元を削減する
特異値分解の意味:
特異値はデータを直接分解することができ、特異値が大きいほど対応する軸の影響が大きく、影響度の少ない特異値に対応する列を削ることで次元を削減する
これらは意味的には異なるが、結果は近い値がでるらしい。
(参考:https://qiita.com/sakami/items/50b8485159312573e3c7)
まとめ
固有値分解と特異値分解は計算方法で、固有値分解の対象は観測値の分散共分散行列や相関行列などの正方行列。特異値分解の対象は観測値のデータ行列などの一般的な行列です。
PCAは分散を最大化するので、固有値分解する方法がメジャーだけど、特異値分解を用いても計算することができる。
おわりに
行列の計算って行列の形状をちゃんと追うのが大事ですね。
今回は、あんまり数式追えなかったので、このあと数式追います。