Goodな生活

INTP型コンサルタントが好奇心の受け皿を探す

【統計検定準1級】主成分分析の直感的理解

最大化問題の立式

主成分分析の目的はデータの要約。x,yの2変量のデータの散布図に、直交する2直線l,mを引く。

図1

このデータの特徴は(x,y)座標という2次元の情報を使わなくても、各データがlmの交点からlに沿ってどのくらい離れているかという1次元の情報である程度把握できる。元データの「情報の損失を最小にする」直線lの選び方を考える。

図2

情報の損失とは図2の赤の破線部分であり、元の位置から動かしてしまった大きさを表す。求める直線lの方向ベクトルを(a,b)とする。ただしa^2+b^2 = 1(x_i,y_i)の垂線の足の座標をz_iとすると、(a,b)(x_i-\bar{x},y_i-\bar{y})のベクトルの内積によって、以下のように表される。


 {\begin{eqnarray}
z_i = a(x_i - \bar{x}) + b(y_i - \bar{y}) \tag{1}
\end{eqnarray}}


情報の損失(赤の破線部分)を最小化する、つまりz_iの平方和*1を最大にするような直線lの方向ベクトル(a,b)を求めればよい。


 {\begin{eqnarray}
\frac{1}{n} \sum_{i=1}^{n} z_{i}^2 &=& \frac{1}{n} \sum_{i=1}^{n} \{a(x_i - \bar{x}) + b(y_i - \bar{y})\}^2 \\
&=& \frac{1}{n} \sum_{i=1}^{n} a^2 (x_i - \bar{x})^2 + \frac{2ab}{n} \sum_{i=1}^{n} (x_i-\bar{x}) (y_i- \bar{y}) + \frac{b^2}{n} \sum_{i=1}^{n} (y_i - \bar{y})^2 \\
&=& a^2 S_{xx}  + 2ab S_{xy} + b^2 S_{yy}\tag{2}
\end{eqnarray}}

つまりa^2+b^2 = 1という制約下で、a^2 S_{xx}  + 2ab S_{xy} + b^2 S_{yy}を最大化する。
Sをデータの分散共分散行列、\mathbb{a} を求めたい方向ベクトルとすると、目的関数と制約条件は以下のように表される。


 {\begin{eqnarray}
\mathbb{a}^\mathrm{T} S \mathbb{a} &=& 
\begin{pmatrix}
a & b \\
\end{pmatrix} 
\begin{pmatrix}
S_{xx} & S_{xy}  \\
S_{yx} & S_{yy} \\
\end{pmatrix} 
\begin{pmatrix}
a \\
b\\
\end{pmatrix} \\
&=& a^2 S_{xx}  + 2ab S_{xy} + b^2 S_{yy}\tag{3}
\end{eqnarray}}

 {\begin{eqnarray}
\mathbb{a}^\mathrm{T}  \mathbb{a} &=& 
\begin{pmatrix}
a & b \\
\end{pmatrix} 
\begin{pmatrix}
a \\
b\\
\end{pmatrix} \\
&=& a^2 + b^2 \\
&=& 1 \tag{4}
\end{eqnarray}}

最大化問題を解く

ラグランジュ未定乗数法で解く。


 {\begin{eqnarray}
L(a,b,λ) &=& a^2 S_{xx} + 2ab S_{xy} + b^2 S_{yy} + λ(1-a^2-b^2) \tag{5} \\ \\
\frac{\partial{L}}{\partial{a}}&=& 2a S_{xx} + 2b S_{xy} -2 λa = 0 \tag{6} \\
\frac{\partial{L}}{\partial{b}}&=& 2a S_{xy} + 2b S_{yy} -2 λb = 0 \tag{7} \\
\frac{\partial{L}}{\partial{a}}&=& 1-a^2 - b^2= 0 \tag{8} \\
\end{eqnarray}}
(6),(7),(8)より、
 {\begin{eqnarray}
a S_{xx} + b S_{xy} &=& λ^*a  \tag{9} \\
a S_{xy} + b S_{yy} &=& λ^*b \tag{10} \\
a^2 + b^2 &=& 1 \tag{11}
\end{eqnarray}}

 {\begin{eqnarray}
\begin{pmatrix}
S_{xx} & S_{xy}  \\
S_{yx} & S_{yy} \\
\end{pmatrix} 
\begin{pmatrix}
a \\
b\\
\end{pmatrix} 
&=& λ^* \begin{pmatrix}
a \\
b\\
\end{pmatrix} \tag{12}
\end{eqnarray}}

したがって

 {\begin{eqnarray}
S \mathbb{a} &=& λ^* \mathbb{a} \tag{13} \\
\mathbb{a}^\mathrm{T} \mathbb{a} &=& 1 \tag{14}
\end{eqnarray}}

方向ベクトル\mathbb{a}は分散共分散行列Sのある固有値λ^*の固有ベクトル。(13)の両辺に\mathbb{a}を掛けると、
 {\begin{eqnarray}
\mathbb{a}^\mathrm{T} S \mathbb{a} &=& λ^* \mathbb{a}^\mathrm{T}  \mathbb{a} \\
                                                              &=& λ^*  \tag{15}
\end{eqnarray}}

(15)の左辺は既に最大化問題を解いた結果であるため、λ^2は行列Sの固有値のうち大きい方*2。求めたい方向ベクトル\mathbb{a}は、分散共分散行列Sの固有値のうち大きいものλ_1 (λ_1 > λ_2)に対応する大きさ1の固有ベクトル。Sの固有値の大きい方λ_1z_iの平方和(ばらつき)を最大化したもの。\mathbb{a}はデータの特徴を表す1番目の座標軸であり第1主成分と呼ぶ。

図3

2番目の座標軸は、第1主成分の方向\mathbb{a}に直交するベクトルのうち、データを射影したときにばらつきが最も大きくなる方向を選べばよい。最大化問題は、c^2+d^2 = 1,a*c + b*d = 1を制約条件とし、c^2 S_{xx}  + 2cd S_{xy} + d^2 S_{yy}を目的関数とする。Sの固有ベクトル同士は直交するため、最適解(c*,d*)は第1主成分と同じくSの2番目に大きな固有値λ_2に対応する固有ベクトルだと分かる。

まとめると、

  • (第1主成分の平方和)= (第1主成分の固有値のうち1番大きいもの)
  • (第1主成分の方向ベクトル)= (1番大きい固有値に対応する固有ベクトル)
  • (第2主成分の平方和)= (第1主成分の固有値のうち2番大きいもの)
  • (第2主成分の方向ベクトル)= (2番大きい固有値に対応する固有ベクトル)

多次元のデータを扱う場合にも成立する。

寄与率

何番目の主成分(座標軸)まで使えば元データの特徴を十分に把握できるかを判断する基準となるのが寄与率。

  • 第1主成分上でのばらつき \mathbb{a}^\mathrm{T}  \mathbb{a} = λ_1
  • 第2主成分上でのばらつき λ_2
  • データ全体のばらつき λ_1 + λ_2

であることを踏まえると、第1主成分の寄与率は\frac{λ_1}{λ_{1}+λ_{2}}。寄与率が十分1に近いとき、第1主成分だけでデータの特徴を把握できる、つまりデータ全体のばらつきのうち第1主成分上のばらつきが大きいことを意味する。データがn次元であるとき、第k成分の寄与率は、

 {\begin{eqnarray}
\frac{λ_k}{λ_1 + λ_2 + \cdots + λ_n} \tag{16}
\end{eqnarray}}

k主成分までの累積寄与率は

 {\begin{eqnarray}
 \frac{λ_1 + \cdots  +λ_k}{λ_1 + λ_2 + \cdots + λ_n} \tag{17}
\end{eqnarray}}

データの標準化

あらかじめデータを標準化(平均0、分散1)して主成分分析を行う場合も多い。この場合Sは分散共分散行列ではなく相関行列となる。神永・木下(2019)によると、分散共分散行列を用いる場合、分散のもっとも大きな変数が主成分の値を変えてしまう問題が生じる。変数の分散を1に標準化すると、分散共分散行列ではなく相関行列を用いることになる。同時に、どの変数も等しく重要だとする判断には恣意性が伴う点についても注意を述べている。

主成分負荷量(因子負荷量)

主成分が何を表す座標かを考えるには、各主成分のデータと各変数のデータの相関関係に着目する。主成分のデータともとのデータの相関関係を主成分負荷量(因子負荷量)と呼ぶ。k次元データとi番目の変数の相関係数を主成分負荷量と呼ぶ。各主成分と関連深い変数が明らかになることで、主成分の解釈を行うときの助けになる。

1主成分とxの主成分負荷量は、

 {\begin{eqnarray}
r_{z_1,x_1} &=&  \frac{Cov[z_1,x_1]}{\sqrt{Var[z_1]Var[x_1]}} \\
&=& \frac{λ_1 a^*}{\sqrt{λ_1} \sqrt{Var[x_1]}} \\
&=& \frac{\sqrt{λ_1 }a^*}{\sqrt{Var[x_1]} }
\tag{18}
\end{eqnarray}}

この値が大きいほど、作成した主成分における元の変数の説明力が高くなる。標準化の仮定、すなわち分散共分散行列ではなく相関行列を用いた場合は、Var[x_1]がゼロになるため、(18)の分子の計算のみ行えばよい。他の変数の主成分負荷量も上と同様に計算できる。

  • (第1主成分とyの主成分負荷量)=\sqrt{λ_1}b^*
  • (第2主成分とxの主成分負荷量)=\sqrt{λ_2}c^*
  • (第2主成分とyの主成分負荷量)=\sqrt{λ_2}d^*

主成分得点

各データの各主成分での座標の値を主成分得点(主成分スコア)と呼ぶ。第1主成分の方向ベクトルが(a^*,b^*)^\mathrm{T} のとき、データ(x_i,y_i)の主成分得点は

 {\begin{eqnarray}
 z_i = a^*(x_i - \bar{x}) + b^*(y_i- \bar{y}) \tag{18}
\end{eqnarray}}

第2主成分の方向ベクトルが(c^*,d^*)^\mathrm{T} のとき、データ(x_i,y_i)の主成分得点は

 {\begin{eqnarray}
 c^*(x_i - \bar{x}) + d^*(y_i- \bar{y}) \tag{19}
\end{eqnarray}}

*1:z_i(\bar{x},\bar{y})を原点とする線分上でマイナスの値をとりえるため、総和ではなく二乗和の形となる

*2:Sは2×2の正方行列であるため固有値は2つ