02.7.1 高校生向け
PCA(高校生向け)
こんな場面を想像してみよう #
机の上に 3 色の団子が 3 つのかたまりで置いてあります。これを 1 枚の写真に撮って、3 つのかたまりがはっきり分かれて写るようにしたい。カメラをどの向きに構えますか。
真上から撮ると 2 つが重なって見えるかもしれません。少し斜めから撮ると 3 つがきれいに分かれて写る角度があるはずです。立体(3 次元)のものを平面(2 次元)の写真にするとき、いちばん「散らばって見える」向きを選ぶ。これが PCA がやっていることです。
上の図は 3 列(\(x_1, x_2, x_3\))のデータです。3 つのかたまりがありますが、この角度では紫と緑が奥行き方向で近く見えます。これに PCA をかけて 2 列にしたのが次の図です。
横軸が第 1 主成分(PC1)、縦軸が第 2 主成分(PC2)です。もとの 3 本の軸のどれでもない、新しく回転させた 2 本の軸に描き直しただけで、3 つのかたまりがきれいに分かれました。
軸はどうやって回す? #
まず、中心を原点に移します。各列から平均を引くと、点の雲全体が原点 (0, 0, 0) を中心に置かれ、形は変わりません。次に、3 列の単位をそろえます(標準化)。各列を標準偏差で割って、どの列も平均 0・標準偏差 1 にすると、「円」と「cm」のような単位のちがいが消えます。
そのうえで、3 列のデータがいちばん散らばる向きを探します。原点を通る直線をいろいろな角度で引き、点をその直線に垂直に落とした(投影した)ときの分散を比べ、分散が最大になる向きを第 1 主成分とします。点の雲が最も長く伸びている方向に 1 本目の軸が置かれます。続いて、第 1 主成分と直角な向きの中で、同じように分散が最大の向きを第 2 主成分とします。3 列なら第 3 主成分まで作れて、3 本は互いに直角なので、もとの座標軸をまるごと回転させたことになります。
最後に、散らばりの小さい軸を捨てます(上の例では第 3 主成分)。各軸の分散が全体に占める割合(寄与率)を見て、合計が 80〜90% になるところまで残します。上の例では第 3 主成分を捨てて、PC1・PC2 の平面に点を描き直しました。
動かして見てみよう #
下の図で「再生」を押すと、説明した手順が 1 つずつ進みます。手順ごとの説明は図の下に出ます。
気をつけたいこと #
最初の注意点は、標準化を忘れると、単位の大きい 1 列に乗っ取られることです。下の図の左は、2 列目を 1000 倍、3 列目を 0.01 倍にしたまま PCA をかけた結果で、横軸が ±10000 になり、第 1 主成分はほぼ「2 列目そのもの」で、3 つのかたまりが重なっています。右は標準化してからかけた結果で、3 つのかたまりが分かれています。
二つ目は、PCA では**「散らばりが大きい=大事」とは限らない**ことです。正解ラベルを見ないので、分けたいグループのちがいが、散らばりの小さい向きに隠れていることもあります。三つ目は、曲がった構造には弱いことです(PCA は軸を回すだけの直線的な変換だからです)。三日月形や輪っか状に並んだデータの形はほどけず、そうしたデータには別の方法(カーネル PCA や UMAP など)があります。
やってみよう #
最初の課題は、方眼紙に右上がりに細長く並んだ点を 10 個描き、定規をいろいろな角度で当てて、点を定規に垂直に落としたときの「広がり」がいちばん大きくなる角度を探すことです。それが第 1 主成分の向きです。二つ目は、体力テストの種目(50 m 走・握力・長座体前屈など)を 5 つ挙げ、「全部をまとめた 1 本の軸」を作るとしたら何を表す軸になるか考えることです。単位がばらばらなことにも注目しましょう。三つ目は、2 つのグループが「縦には大きく散らばり、横に少しだけずれている」ように並んでいるとき、第 1 主成分だけ残すと区別は残るだろうかと考えることです。散らばりの大きい向きと分けたい向きがちがう例を、もう 1 つ考えてみましょう。
つぎに読む #
共分散行列と固有値分解による数式、PCA(n_components=2) を使ったコード、寄与率の確認方法は 標準版の主成分分析 で扱っています。「距離」と「平均」でグループを見つける方法は k-means(高校生向け) へ進んでください。PCA で 2 次元にしてから k-means をかける、という組み合わせもよく使われます。列を「作り直す」のではなく「選んで減らす」考え方は 特徴選択の基本(高校生向け) で紹介しています。