【PCA超入門】データを「写真撮影」してスッキリ要約!主成分分析の仕組みを直感理解
こんにちは。ゆうせいです。
みなさんは、手元にあるデータが「項目多すぎ!」で困ったことはありませんか。
例えば、健康診断の結果表。「身長、体重、腹囲、血圧、血糖値、コレステロール……」と数十個もの項目(列)が並んでいると、結局その人が健康なのか不健康なのか、パッと見て判断するのは難しいですよね。
「これ、なんとかして2つか3つくらいの指標にまとめられないかなあ」
そんな贅沢な悩みを解決してくれるのが、今回紹介する 主成分分析(Principal Component Analysis、略してPCA) です。
前回学んだ「対称行列」のパワーをフル活用して、ごちゃごちゃしたデータをスッキリ整理整頓する、データ分析の必須テクニックです。
今日は数式をほとんど使わず、「カメラでの写真撮影」に例えて、その仕組みを直感的に解説します。
主成分分析(PCA)とは何か
一言で言うと、「たくさんの項目(変数)を持つデータを、情報の損室を最小限に抑えつつ、少数の項目に『要約』する手法」 です。
専門用語では 次元削減 と呼びます。
例えば、国語・数学・理科・社会・英語の「5教科のテスト点数」があったとします。これは「5次元」のデータです。
これをPCAにかけると、「総合学力」と「理系・文系傾向」のような、新しい2つの指標(2次元) に作り変えることができます。
5個あった数字が2個になれば、グラフにするのも簡単ですし、人間が見て理解しやすくなりますよね。
仕組みは「ベストなカメラアングル」を探すこと
では、どうやってデータを要約しているのでしょうか。
ここでイメージしてほしいのが、「立体のオブジェを写真に撮る」 という作業です。
手元に「ラグビーボール」があると想像してください。これは3次元の物体ですね。
このラグビーボールの特徴(形や大きさ)を、たった1枚の写真(2次元)で友人に伝えたいとき、あなたはどこから撮影しますか。
- 横から撮る: ボールが一番長く見える角度。楕円形の形がよくわかります。
- 真正面から撮る: ボールがただの「円」に見えてしまう角度。これだとラグビーボールらしくは見えません。
当然、1. 横から撮る を選びますよね。なぜなら、その方がボールの「広がり(情報)」をたくさん残せるからです。
PCAがやっているのは、まさにこれです。
データという「形」をさまざまな角度から眺めて、「影(データの散らばり)が一番大きく広がるベストな角度」 を数学的に計算して探し出しているのです。
この「ベストな角度」を見つける計算に、前回学んだ 「対称行列(分散共分散行列)の固有ベクトル」 が使われます。
あの時、「固有ベクトルは直交する」と学びましたよね。
PCAでは、まず「一番情報量が多い角度(第1主成分)」を見つけ、次に「それと直交する角度の中で、一番情報量が多い角度(第2主成分)」を見つける……という手順で、新しい座標軸を作っていくのです。
PCAを使うメリットとデメリット
とても便利なPCAですが、万能ではありません。良い点と悪い点をしっかり押さえておきましょう。
メリット
- データの可視化ができる
100次元あるデータはグラフに描けませんが、PCAで2次元や3次元に圧縮すれば、散布図として描画できます。「似ているデータ」が近くに集まるので、グループ分けなどがしやすくなります。 - ノイズを除去できる
情報の少ない(散らばりの小さい)成分を捨てることで、データに含まれる細かな誤差やノイズを取り除き、本質的な特徴だけを取り出すことができます。
デメリット
- 「新しい軸」の意味が人間にわかりにくい
PCAで作られた「第1主成分」は、元の項目の複雑な足し合わせで出来ています。そのため、「この軸は『身長』です」のように明確な名前がつかず、「なんとなく『体の大きさ』を表す軸かな?」といった解釈を人間が自分で考える必要があります。 - 情報の一部は必ず失われる
「要約」する以上、元のデータが持っていた細かい情報は切り捨てられます。ラグビーボールを写真に撮ると「奥行き」がわからなくなるのと同じです。
今後の学習の指針
いかがでしたでしょうか。
難しそうな「主成分分析」も、「一番良い影ができる角度を探して、写真を撮っているだけ」と考えれば、少し親しみが湧いてきませんか。
このPCAは、マーケティングでの顧客分析から、画像認識の前処理まで、ありとあらゆる場面で登場します。「対称行列」と「固有値」が、裏側で一生懸命ベストアングルを探してくれている姿を想像してあげてください。
さて、理論のイメージが掴めたら、次は実践です。
Pythonの scikit-learn というライブラリを使えば、わずか数行のコードでこのPCAを実行できます。
次回は、実際にワインの成分データを分析して、PCAで「美味しいワインの傾向」を可視化するコードを書いてみましょう。