何度やっても忘れてしまう主成分分析(PCA)と特異値分解(SVD)の関係性.忘れてしまうのは分かっていないから.ということで,再度お勉強.
長らくあやふやにしてきた主成分分析の中心化問題.今回の勉強で「主成分分析では事前にデータを中心化する必要がある」ことがようやく理解した.
なぜ中心化が必要か?それは,主成分分析が重心を中心に元データを回転させることで,新たな軸を見つける操作だから.中心化をしないと,元データは原点を中心に回転されてしまう(注:中心化しなくても,主成分分析っぽい導出はできてしまうが,これではダメなのだ(参考:主成分分析 (2) – 主成分の導出と意味)).これでは主成分分析のコンセプトから逸脱してしまう(この理解に至るまで時間がかかった(参考:回転の中心 – 何を基準に考えるか)).
ちなみに,scikit learnのPCAは事前にデータを中心化しなくても,内部で勝手にデータを中心化してくれるようである.一方で,scikit learnのSVDは,データは自動的に中心化しない.SVDは単なる行列分解手法だから,主成分分析を目的としない特異値分解をしたいときに勝手に中心化されても困る.scikit learnでPCAメソッドを使わずに,SVDを使ってPCAを行うときは,対象となる行列を事前に中心化する必要があることに注意.
なお,文書-単語行列の次元圧縮手法である潜在的意味解析(LSI)もSVDを用いるが,LSIでは元データの中心化は行わない.理由は参考サイトにも書かれているように,文書-単語行列はスパースであるため,中心化すると計算量が膨大になること.また,文書ベクトルの類似度は角度が重要であることから,中心化するとその情報が保存されないことが理由だそう(参考:Latent Semantic Indexing and Data Centering).参考サイトにも書かれていたが,文書行列はもともとスパースなので,各次元の平均値はそもそもゼロに近い.これら理由より,LSIでは中心化は行わないようである.
参考にしたサイトの一覧: