Python、Rで主成分分析Principal component analysis on Python, R

主成分分析

主成分分析(Principal component analysis; PCA)は、高い次元のデータを、なるべく情報を保ったまま、低い次元に集約する方法です。

p 次元の確率変数ベクトル \boldsymbol{X}=(X_1,\ldots,X_p)^T をある軸に射影したときに、その分散を最大にするような軸を第1主成分といいます。

第1主成分を定式化すると、長さ 1 のベクトル

    \[\boldsymbol{w}=(w_1,\ldots,w_p)^T,\hspace{2em}\sqrt{\boldsymbol{w}^T\boldsymbol{w}}=1\]

を考えた時、\boldsymbol{w} の方向への射影

    \[Y=\boldsymbol{w}^T\boldsymbol{X}=w_1X_1+\cdots+w_pX_p\]

の分散を最大にする \boldsymbol{w} が第1主成分となります。

以上から、n 個の p 次元データ \boldsymbol{x}_1,\ldots,\boldsymbol{x}_n が与えられたとき、これらのデータからなる行列を

    \[X=\left( \begin{array}{c} \boldsymbol{x}^T_1 \\ \vdots \\ \boldsymbol{x}^T_n \end{array} \right) =\left( \begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np}  \end{array} \right)\]

とおき、X に対する標本分散共分散行列を V とすると、n 個の 1 次元データ (\boldsymbol{w}^T\boldsymbol{x}_1,\ldots,\boldsymbol{w}^T\boldsymbol{x}_n)^T から求まる標本分散は

    \[\boldsymbol{w}^TV\boldsymbol{w}\]

と表せます。

よって、これを最大にする \boldsymbol{w} が第1主成分となります。

Python(scikit-learn)

GitHub: https://github.com/Gin04gh/samples_py/blob/master/PrincipalComponentAnalysis.ipynb

R

GitHub: https://github.com/Gin04gh/samples_r/blob/master/PrincipalComponentAnalysis.ipynb