主成分分析(PCA)は、複数の数値変数を、できるだけ多くのばらつきを保ったまま、より少ない新しい変数の集合に変換する方法です。「PCAとは何か」を短く言えば、データを新しい座標軸に回転させて、広がりを最もよく表す軸だけを残す手法です。
この新しい軸を主成分と呼びます。標準的なPCAでは、第1主成分が可能な限り大きな分散をとらえ、第2主成分は第1主成分と直交しながら残りの分散をできるだけ多くとらえます。以降の主成分も同じ考え方で決まります。
PCAが見つけようとしているもの
高次元空間に点の集まりがあると考えてみましょう。PCAは、その点群が最も大きく広がっている方向を探します。
もし広がりの大部分が1つか2つの方向に集中しているなら、元のすべての変数を使わなくても、1つか2つの主成分でデータをうまく要約できるかもしれません。だからPCAは、次元削減、可視化、圧縮、前処理に使われます。
中心化されたデータに対して、第1主成分は次を解きます。
ここで、 は中心化されたデータ行列、 は方向ベクトルです。
中心化という条件は重要です。中心化しないと、選ばれる方向が平均値の大きさに引っ張られ、平均のまわりでデータがどう変動しているかではなくなってしまうことがあります。
PCAの計算方法
標準的な手順は短くまとまっています。
- 観測値を行に、変数を列に並べます。
- 各変数から平均を引いて中心化します。
- 変数の単位が大きく異なり、尺度の違いに支配されたくない場合は標準化も行います。
- 中心化したデータの共分散行列を計算します。
- その固有ベクトルと固有値を求めます。
固有ベクトルは主成分の方向を与えます。固有値は、それぞれの方向がどれだけ分散を説明しているかを示します。
PCAは特異値分解、つまりSVDで計算されることもよくあります。中心化されたデータに対しては、同じ主成分部分空間が得られ、実務ではこちらのほうが数値計算上好まれることも多いです。
2次元で見るPCAの具体例
次の3つの2次元データを考えます。
これらの点はちょうど直線 上にあるので、1つの支配的な方向があると予想できます。
まず、平均 を引いてデータを中心化します。
この中心化データに対する共分散行列は、次に比例します。
この行列の2つの直交する固有ベクトル方向は
です。
第1の方向は、実際にデータが変動している直線に沿っています。第2の方向は、その直線を横切る向きです。
中心化した点を第1の方向に射影すると、
第2の方向に射影すると、
となります。
つまり、すべての変動は の方向にあり、 の方向にはまったくありません。この特別な場合、1つの主成分だけで、各点を1つの数で表しながら変動のパターン全体を保てます。
これが最も単純な形のPCAです。座標系をデータに合うように回転させ、その回転後の座標のうち、どれを残す価値があるかを考える方法です。
主成分の意味
各主成分は、元の変数の線形結合です。
たとえば第1主成分が
のような形なら、主な変動方向は最初の2変数をほぼ同じ重みで組み合わせたものだと解釈できます。正確な意味づけは、変数の内容や、データを中心化だけしたのか標準化もしたのかによって変わります。
スコアは、各観測値を主成分方向へ射影したあとの座標です。負荷量は、各元変数がその主成分にどれだけ強く寄与しているかを表します。
PCAでよくある間違い
中心化を省く
標準的なPCAは通常、中心化したデータに適用します。中心化を省くと、結果は本当に見たい変動よりも、変数の平均的な水準を強く反映してしまうことがあります。
尺度を無視する
ある変数がドル、別の変数がミリメートルで測られていると、大きな尺度の変数が分散計算を支配することがあります。単位が異なり、相対的な尺度で答えが決まってほしくないなら、標準化が適切な場合が多いです。
PCAは最も意味のある特徴を見つけると思い込む
PCAが見つけるのは分散の大きい方向であって、必ずしも因果的に最も意味のある方向や、クラス分離に最も有効な方向ではありません。分散が大きいことと、役に立つことは常に同じではありません。
低次元への射影を情報損失なしだと考える
最初のいくつかの主成分だけを残すのは近似です。非常にうまくいくことはありますが、残りの成分の分散が厳密にゼロでない限り、何らかの情報は捨てています。
PCAが役立つ場面
PCAは、変数同士に相関があり、データをもっと単純に表現したいときによく使われます。
代表的な用途は次のとおりです。
- モデル化の前に入力特徴量の数を減らす
- 高次元データを2次元や3次元で可視化する
- 分散の大部分を保ちながら測定データを圧縮する
- 金融、生物学、画像解析、信号処理で支配的なパターンを見つける
この手法は、分散にもとづく構造が問題のよい要約になっているときに特に有効です。
似た問題をやってみる
点 、、、 をプロットしてみましょう。中心化したあと、方向 と に沿った広がりを比べてください。この小さな練習をすると、なぜPCAが一方の方向を重要とみなし、もう一方をほぼ冗長とみなすのかがよくわかります。
さらに一歩進めたいなら、点が完全には一直線上にない例を自分で作ってみて、第1主成分が説明する分散と第2主成分が説明する分散を比べてみてください。