主成分分析 PCA わかりやすく
机の上に粟をひとつかみまいたとしましょう。粒が丸く広がらずに片側へ細長く寝ていたら、だれでもひと目で、この向きにいちばん広く散らばっていると指させます。主成分分析 (PCA) が問うのは、まさにこのことです。データの雲の中で、いちばん散らばっている向きはどこか。その向きが第1主成分 (PC1) で、それに直角な、二番目に散らばった向きが PC2 です。驚いたことに、この二つの向きはデータの共分散行列の固有ベクトルで、それぞれの向きの散らばり具合である分散が、まさに固有値なのです。「固有ベクトルは向きが変わらないベクトルだ」で見たあの固有の考えが、今度はデータの散らばりにそのまま使われます。
取っ手をドラッグして点の雲をぐるりと回すと、雲全体が取っ手について傾きます。どの角度に回しても、点を囲む金色の楕円(共分散を 1 シグマで描いたもの)が雲といっしょに回ります。その楕円の中のいちばん長い軸(緑)が PC1、それに直角な短い軸(オレンジ)が PC2 です。二つの軸の長さはそれぞれの向きの分散の平方根、つまり標準偏差で、下には二つの向きの分散が表示されます。雲を回しても、PC1 はいつもいちばん長く散らばった向きをぴたりと指します。これらの軸こそが、点から計算した共分散行列の固有ベクトルなのです。
今度はスライダーで雲の角度だけを変えます。二本の軸、PC1 (緑)と PC2 (オレンジ)がいつもついてきます。PC1 は分散がいちばん大きい向き、PC2 はそれにぴったり直角な二番目の向きです。スライダーをどこに置いても二本の軸はいつも 90 度を保ちます。対称な共分散行列の固有ベクトルは、いつも互いに直交するからです。だから主成分は、重ならない向きにデータをすっきり分けてくれます。一本の軸の情報が、もう一本の軸へ漏れないということです。
なぜ PC1 が特別なのかは、自分で測れます。スライダーである向きの直線を回すと、すべての点がその直線の上へ垂直に射影され、足あとが打たれます。その足あとが直線の上でどれだけ散らばっているかがその向きの分散で、下にその値が棒と数で表示されます。直線をあちこち回すと、分散は PC1 と平行なときに最大まで跳ね上がり、PC2 と平行なときに最小まで沈みます。最大の近くに来ると、直線と足あと、棒が緑に変わります。だから PC1 は、分散を最大にする向きだとも定義されます。いちばん散らばった向きこそ、情報がいちばん多く生き残る向きなのです。
いよいよ本当の使い道、次元削減へ進みます。トグルで PC1 か PC2 のどちらか一本の軸だけを残すと、点はその軸の上へぺたりと押しつけられ、捨てた直角の向きは復元誤差である赤い点線のしっぽとして表されます。表示される値は捨てた軸の分散、つまり失った情報の量です。PC1 だけを残すとしっぽがいちばん短くなります。いちばん散らばっていない向きを捨てたので、失ったものがいちばん少ないからです。2D を 1D に縮めながら損失をいちばん小さくすること、それが PCA でデータを圧縮するやり方なのです。
最後は、本当に何次元が必要なのかを問う道具です。スライダーで雲を丸い形からとても細長い形まで伸ばすと、二本の棒に固有値の割合が現れます。上は λ1/(λ1+λ2)、下は λ2/(λ1+λ2) です。雲が丸いと二本の棒はほぼ 50 対 50 なので、一本の軸だけを残すと半分を失います。細長くなるほど PC1 の棒は 100 パーセントに近づき、PC2 はほとんど 0 になります。そのときは一本の軸だけを残しても、情報をほとんどすべて守れます。この説明された分散の割合が、データを何次元まで縮めてよいかを見きわめるものさしなのです。