PCA, 主成分解析 資料まとめ

"Interactive Relighting with Dynamic BRDFs"の論文読んでたら、PCAが出てきた。最近良く耳にするので軽く勉強してみようと思う。

英語Wikipedia:PCAは別名Karhunen-Loève transformとも言うらしい。
[1] http://en.wikipedia.org/wiki/Karhunen-Lo%C3%A8ve_transform

[2] CEDEC2007参加された方は、OLMデジタルの安生さんのセッション資料で概要がつかめると思います。(R15)
セッション資料にもポインタがありますが、京大の加納学先生のページに主成分分析の入門用テキストがよさげな感じです。
[3] http://www-pse.cheme.kyoto-u.ac.jp/~kano/document.htm

英語でいいなら以下(en:wikipediaより)
[4] http://csnet.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf (個人的には↑よりわかりやすかった)
[5] http://www.cs.cmu.edu/~elaw/papers/pca.pdf

liboctaveを使用してC++で主成分解析
[6] http://vision.kuee.kyoto-u.ac.jp/~hiroaki/numerical/

OpenCV行列libを使って主成分解析
[7] http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/pukiwiki.php?%BC%E7%C0%AE%CA%AC%CA%AC%C0%CF

さて、十分資料は集めたので読む。→読んだ。

[2](あるなら) -> [4] -> [3](p8以降)がおすすめルート。

一言でまとめると:
共分散行列計算して、その固有値固有ベクトル求めて、固有値の大きい順に対応する固有ベクトルを列ベクトルとする行列つくってそれで変換するとデータの次元ちょっとさがるよって話だった。
これを正直にやるといろいろと問題がおきるので、補正を入れる方法が[3]のp8以降に載ってます。(平均=分散=1正規化とか)

liboctave使う必要あるかなーと思ったけど、上記のように非常に簡単なアルゴリズムでちゃんと動くようなので、おそらくboost::uBlasで組む。