PCA 2D/3D ビジュアライザー

データを中心化し、主成分方向を計算して、どれだけ分散を捉えられるか分析する。

インタラクティブシミュレーションを読み込んでいます...

単位を変えると PCA は違う答えを出す

主成分分析(PCA)は共分散行列に基づく手法であり、共分散には単位が伴います。身長をメートル、体重をキログラムで記録すれば、ある主成分が得られます。身長の単位だけをミリメートルに変えると、その変数の数値は千倍、分散は百万倍になり、第一主成分はほぼ身長の軸だけを向いてしまいます。データそのものは何も変わっていません。変わったのは物差しだけです。そこで実際の分析では、まず各変数を平均ゼロ、分散一に標準化します。これは共分散行列ではなく相関行列にPCAを施すことに相当します。回帰分析と違い、PCAには、数値が大きいことと重要であることを区別する仕組みがありません。

データが傾く方向

主成分分析は、点の集まりが最も大きく広がる一本の直線を探し、その上での各点の位置を測ります。寄与率は、その一本の直線がばらつきのどれだけを保っているかを示します。ここでは PC1 が約 85% を超えると、平らな1次元の要約でもほとんど情報を失わないとツールが知らせます。サンプルを切り替えて、強く相関した点群がほぼすべてのばらつきを PC1 に譲る様子を見てみましょう。

回帰直線とは別物

PC1を通常の回帰直線とみなしたくなりますが、両者が最小化するものは異なります。線形回帰が最小化するのは、各点から直線までのy軸方向の距離です。PCAが最小化するのは、直線に垂直な方向の距離です。同じ点群を使っても、二本の直線は実際に異なります。カール・ピアソンは、まさにこの垂直距離に基づく最適合直線を1901年に発表しました。「主成分」という語が生まれる三十年も前のことです。

全プロセスの詳細解説

  1. PC1で99.49%、PC2で0.51%の分散を持つ6点 8 ステップ

    6つの点:(2, 1)、(3, 2)、(4, 2.2)、(5, 3.2)、(6, 3.9)、(7, 5)。パネルにはPC1の分散が99.49%、PC2の分散が0.51%と表示されており、点群は実質的に直線状であるように見えます。これらの点が実際にはその直線からどれほど離れているかを求めてください。

    1. まずは中心化を行います。以降の計算はすべて散らばりに関するものであり、位置そのものには関係しないためです。xの値は幅1のステップで2から7まで変化するため、その平均値は範囲の中央に位置し、中心化されたxの列は対称的になります:±0.5、±1.5、±2.5。計算が必要なのはyだけです。

      μ=16∑ixi=(276, 17.36)=(4.5, 2.883333)\mu=\tfrac16\textstyle\sum_i x_i=\left(\tfrac{27}{6},\ \tfrac{17.3}{6}\right)=(4.5,\ 2.883333)
    2. 共分散は、積の和を6ではなくn − 1 = 5で割ります。差し引いたばかりの平均値を推定する際に1自由度がすでに消費されており、わずか6点のデータではこの補正が20%に相当するためです。

      C=15XcTXc=15(17.513.3513.3510.408333)=(3.52.672.672.081667)C=\tfrac15X_c^{\mathsf T}X_c=\tfrac15\begin{pmatrix}17.5&13.35\\13.35&10.408333\end{pmatrix}=\begin{pmatrix}3.5&2.67\\2.67&2.081667\end{pmatrix}
    3. 2つの数値があれば両方の固有値を得ることができ、どちらも方向を必要としません。トレースは全分散を表し、行列式は行列が特異行列からどれほど離れているかを測ります。トレース5.581667に対して行列式0.156933という値は、行列が極めてランク1に近いことを示しています。

      tr⁡C=5.581667,det⁡C=3.5⋅2.081667−2.672=0.156933\operatorname{tr}C=5.581667,\quad \det C=3.5\cdot2.081667-2.67^{2}=0.156933
    4. 特性方程式を解きます。λ1はλ2の約200倍となり、この点群の形状が1つの比較に凝縮されます。

      λ=12 ⁣(tr⁡C±tr⁡2C−4det⁡C)⇒λ1=5.553408, λ2=0.028259\lambda=\tfrac12\!\left(\operatorname{tr}C\pm\sqrt{\operatorname{tr}^{2}C-4\det C}\right)\Rightarrow \lambda_1=5.553408,\ \lambda_2=0.028259
    5. 説明分散の行はその比率にほかなりません。したがって99.49%という数値はλ1とλ2についての記述であり、それらが分散(すなわちデータの単位の2乗を伴う量)であるという性質をそのまま受け継いでいます。このことを覚えておいてください。

      λ1λ1+λ2=5.5534085.581667=99.49%,λ2λ1+λ2=0.51%\frac{\lambda_1}{\lambda_1+\lambda_2}=\frac{5.553408}{5.581667}=99.49\%,\qquad \frac{\lambda_2}{\lambda_1+\lambda_2}=0.51\%
    6. 方向とは固有ベクトルのことであり、非対角成分がゼロでない2×2共分散行列については、何も解くことなくそれを書き下すことができます:(λ1 − Syy, Sxy) はすでにPC1に沿った方向を指しています。これを単位長さに正規化すれば、表示されているベクトルになります。

      v1∝(λ1−Syy, Sxy)=(3.471741, 2.67)⇒v1=(0.792687, 0.609629)v_1\propto(\lambda_1-S_{yy},\,S_{xy})=(3.471741,\,2.67)\Rightarrow v_1=(0.792687,\,0.609629)
    7. それを1/4回転させてv2を得て、最初の中心化された点をそこへ射影します。その結果である0.031179は、スコア表の2番目の数値です。したがって、パネルが何であるかを説明せずに表示しているその列全体は、各点からPC1直線までの符号付き距離であり、6つの点の中で最も離れているものは−0.236855です。

      v2=(−0.609629, 0.792687): (x1−μ)⋅v2=(−2.5)(−0.609629)+(−1.883333)(0.792687)=0.031179v_2=(-0.609629,\,0.792687):\ (x_1-\mu)\cdot v_2=(-2.5)(-0.609629)+(-1.883333)(0.792687)=0.031179
    8. ここでパーセンテージによって隠されていた疑問が生じます。λ2は分散であるため距離の2乗であり、代表的な誤差はその平方根となります。これを、直線に沿った散らばりであるλ1の平方根と比較してみましょう。

      σ2σ1=λ2λ1=0.0282595.553408=0.0713\frac{\sigma_2}{\sigma_1}=\sqrt{\frac{\lambda_2}{\lambda_1}}=\sqrt{\frac{0.028259}{5.553408}}=0.0713

    解答

    各点はPC1直線から点群の長さの約7.13%離れており、0.51%ではありません。 どちらの数値も同じ6つの点を表していますが、一方は2乗の比率、他方は長さの比率であり、両者の間にある平方根によってここでは14倍の違いが生じています。このギャップこそが、「分散の99%を保持する」という形式のあらゆるルールに潜む罠です。垂直方向のズレを散らばりの1%未満に抑えるには、PC2の分散を0.01%未満にする必要があり、これはルールから受ける印象よりも100倍厳しい条件です。データの単位では、ズレは√λ2 = 0.168104であり、隠されてはいません — チャート上に各緑色の点からその青色の射影への灰色の線分として描かれており、それらの線分の長さは明らかにゼロではありません。

    λ2=0.168104,λ1=2.356567,λ2λ1=7.13%\sqrt{\lambda_2}=0.168104,\qquad \sqrt{\lambda_1}=2.356567,\qquad \frac{\sqrt{\lambda_2}}{\sqrt{\lambda_1}}=7.13\%
  2. 傾き0.769のPC1と0.763の最小二乗適合 6 ステップ

    PC1は (0.792687, 0.609629) と表示され、これは傾き0.769の方向です。まったく同じ共分散の要素から最小二乗法によってyをxに当てはめると、2.67/3.5 = 0.763が得られます。1つの6点データ群を通る2本の直線があります。どちらの傾きがより急であるか、そして常にそちらが急になることを示してください。

    1. yに対する最小二乗法は垂直方向の隔たりを最小化し、その最小化を与える値はSxy/Sxxとなります。分母にあるものに注目してください:x単独の散らばりです。この当てはめはxを与えられたものとして扱い、それに応じてyがどのように変化するかだけを問いかけます。

      by∣x=SxySxx=2.673.5=0.762857b_{y\mid x}=\frac{S_{xy}}{S_{xx}}=\frac{2.67}{3.5}=0.762857
    2. PC1の傾きは、表示された単位ベクトルから直接読み取ることができます。方向 (a, b) の傾きは b/a となるためです。これは回帰の傾きを約千分の6上回っており、わずかではありますがゼロではありません。

      mPC1=0.6096290.792687=0.769067m_{\mathrm{PC1}}=\frac{0.609629}{0.792687}=0.769067
    3. 両者を適切に比較するために、PC1の傾きを小数の比としてではなく、固有ベクトルが定義する形式で書き表します。分子はどちらも同じSxyであるため、差のすべては分母にあります:回帰の場合はSxx、PC1の場合はλ1 − Syyです。

      v1∝(λ1−Syy, Sxy) ⟹ mPC1=Sxyλ1−Syy=2.673.471741v_1\propto(\lambda_1-S_{yy},\,S_{xy})\ \Longrightarrow\ m_{\mathrm{PC1}}=\frac{S_{xy}}{\lambda_1-S_{yy}}=\frac{2.67}{3.471741}
    4. λ1を展開します。PCAの分母の方が小さいかどうかは、単一の平方根についての問題に帰着されます。

      λ1−Syy=12 ⁣(Sxx−Syy+tr⁡2C−4det⁡C)\lambda_1-S_{yy}=\tfrac12\!\left(S_{xx}-S_{yy}+\sqrt{\operatorname{tr}^{2}C-4\det C}\right)
    5. そして、その平方根が行列式が正であるときに限ってトレースよりも小さくなりますが、これは完全な直線ではない任意の点群について成立します。したがって、PC1の分母は常に小さくなり、結果としてPC1の傾きは常に2つのうち急な方になります。これらの6つの点固有の性質は一切使用されていません。

      det⁡C>0  ⟺  tr⁡2C−4det⁡C<tr⁡C  ⟺  λ1−Syy<Sxx\det C>0\iff\sqrt{\operatorname{tr}^{2}C-4\det C}<\operatorname{tr}C\iff\lambda_1-S_{yy}<S_{xx}
    6. 役割を入れ替えて、代わりにxをyに回帰させます。これが3本目の直線であり、同じy対xのグラフに合わせてその傾きを書き換えると0.779650になります。この入れ替えによってPC1が動くことはありません(共分散行列はxとyに関して対称であるため)。したがって、前のステップの議論が今度は逆向きに適用され、PC1はこのペアの中で緩やかな方の傾きとなります。

      bx∣y=SxySyy=2.672.081667=1.282626 ⟹ 1bx∣y=SyySxy=0.779650b_{x\mid y}=\frac{S_{xy}}{S_{yy}}=\frac{2.67}{2.081667}=1.282626\ \Longrightarrow\ \frac{1}{b_{x\mid y}}=\frac{S_{yy}}{S_{xy}}=0.779650

    解答

    1つの点群を通る3本の直線:0.762857 < 0.769067 < 0.779650 であり、PC1は厳密に中央に位置します。 パネルが99.49% 1次元的であると呼ぶ点群において、2つの回帰直線は2.2%食い違っていますが、これはそれらが異なる問い(xからyを予測するか、yからxを予測するか)に答えているためです。PC1はそのどちらにも答えません。PC1は垂直距離を最小化するため、軸のラベルを付け替えても図が回転するだけで直線は元の位置のまま留まり、その残差は垂直方向の隔たりではなく第2スコア列となります。これら3本が1本に一致するのはdet C = 0のとき、すなわち点群が本当に同一直線上にあり議論の余地がなくなるときに限られます。これらの両極端の間において、PCAは両方の座標に測定誤差が含まれている場合に使用すべき直線であり、純粋に予測を行いたい場合には誤った直線となります。回帰直線の傾きが意図的に緩やかになっているのは、水平方向へと引き戻すことによって予測誤差の2乗和が最小化されるためです。

    0.762857 < 0.769067 < 0.7796500.762857\ <\ 0.769067\ <\ 0.779650

学習の道すじ

ものを動かす行列

参考文献 (2)