この記事を書いたのはこんな人

- 国立大学大学院数学科修了
- 元教員
- 統計検定準1級
- 数学検定準1級
- kaggler
この記事を書いたのはこんな人
yu-to☑️ 国立大学大学院数学科修了
☑️ 元教員
☑️ 数学検定準1級
☑️ 統計検定準1級
☑️ kaggler
主成分分析とは
データ分析の現場では、多くの変数を扱うことが珍しくありません。しかし変数が増えるほど、相関関係が複雑になり、データの本質を捉えることが難しくなります。
主成分分析(PCA)は、相関のある複数の変数を少数の「主成分」に集約することで、データの構造をシンプルに表現できる強力な手法です。
例えば、数十の指標がある顧客データも、主成分に変換することで主要な傾向が明確になり、可視化や分類、予測モデルへの応用が容易になります。情報を損なわずに次元を削減できるため、ノイズを減らし、解釈もしやすくなるのが大きな魅力です。
本記事では、そんな主成分分析の中身を紐解くものになっています。導出とそのあとの数値例を合わせて見てみてください。
変数が2個の場合の主成分分析の導出
変数が \(x_1\), \(x_2\) の \(2\) つで, サンプルサイズが \(n\) とする。
変数 \(x_1\), \(x_2\) を標準化する。
\(u_1 = \displaystyle\frac{x_1-\bar{x_1}}{s_1}\), \(u_2 = \displaystyle\frac{x_2-\bar{x_2}}{s_2}\)
ここで, \(\bar{x_1}\) と \(\bar{x_2}\) はそれぞれの変数の平均, \(s_1\) と \(s_2\) はそれぞれの変数の標準偏差である。標準化することで, \(u_1\) と \(u_2\) は両者とも平均が \(0\), 分散が \(1\) になる。また, 後のため, 次のことにも注意しておく。
\(\displaystyle\sum_{i=1}^n u_{i1}^2 = \displaystyle\sum_{i=1}^n u_{i2}^2 =n-1\)
\(\displaystyle\sum_{i=1}^n u_{i1} u_{i2} = (n-1) r_{x_{1}x_{2}}\)
相関係数 \(r(u_1,\) \(u_2)\) = 共分散/(\(u_1\) の標準偏差 × \(u_2\) の標準偏差) から明白である。
第1主成分 \(z_1\) を
\(z_1=a_1u_1+a_2u_2\)
とおく。\(\bar{u_1}=\bar{u_2}=0\) だから,
\(\bar{z_1}=0\)
である。目的は, データの情報をできるだけ多く有するように \(z_1\) を定めることである。「\(z_1\) がもとのデータの情報をできるだけ有する」ということを「データの全体のバラツキをできるだけ \(z_1\) のバラツキに反映させる」と考える。すなわち, \(z_1\) の分散
\(V_{z_1}=\displaystyle\frac{1}{n-1}\sum_{i=1}^n (z_{i1}-\bar{z_1})^2\)
\(= \displaystyle\frac{1}{n-1}\sum_{i=1}^n z_{i1}^2\)
が最大になるように \(a_1\) と \(a_2\) を求める。
\(V_{z_1}= \displaystyle\frac{1}{n-1}\sum_{i=1}^n z_{i1}^2\)
\(=\displaystyle\frac{1}{n-1} \{a_1^2\sum u_{i1}^2 +2a_1a_2\sum u_{i1}u_{i2} +a_2^2\sum u_{i2}^2\}\)
\(=a_1^2+a_2^2+2r_{x_1x_2} a_1a_2\)
となるから, \(V_{z_1}\) の値は \((a_1,\) \(a_2)\) の値が大きくなればいくらでも大きくなる。そこで,
\(a_1^2 + a_2^2 =1\)
の制約条件を設けた下で, \(V_{z_1}\) の最大化を考える。
制約付きの最大化問題を求めるための定石はラグランジュの未定乗数法である。未定乗数 \(\lambda\) を用いて,
とおき, \(a_1\), \(a_2\) のそれぞれで偏微分してゼロとおく。すると, 次式を得る。
\(2a_1+2r_{x_1x_2}a_2-2\lambda a_1 = 0\)
\(2r_{x_1x_2}a_1 + 2a_2 – 2\lambda a_2 = 0\)
両辺をそれぞれ \(2\) で割ると,
\(a_1+r_{x_1x_2}a_2-\lambda a_1 = 0\)
\(r_{x_1x_2}a_1 + a_2 – \lambda a_2 = 0\)
そして, 行列の形に表現すると
\(\begin{aligned} \begin{pmatrix} 1 & r_{x_1x_2} \\ r_{x_1x_2} & 1 \end{pmatrix} \begin{pmatrix} a_1 \\ a_2 \end{pmatrix} = \lambda \begin{pmatrix} a_1 \\ a_2 \end{pmatrix} \end{aligned}\)となる。行列 \(R\) を
\(R=\begin{aligned} \begin{pmatrix} 1 & r_{x_1x_2} \\ r_{x_1x_2} & 1 \end{pmatrix} \end{aligned}\)とおく。\(R\) は相関係数行列である。また, \(\boldsymbol{a} = [a_1, a_2]’\) とおくと,
\(R\boldsymbol{a} = \lambda\boldsymbol{a}\)
となる。\(\lambda\) が行列 \(R\) の固有値であり, 求めるべき \([a_1, a_2]\) は固有ベクトルであることを示している。
以上より, \(V_{z_1}\) を最大化することは,
「相関係数行列 \(R\) の固有値問題を解いて, 最大固有値 \(\lambda_1\) に対応する固有ベクトル \(\boldsymbol{a}=[a_1, a_2]’\) を求めれば, それが \(V_{z_1}\) の最大値を与える \([a_1, a_2]\) であり, \(V_{z_1}\) の最大値は \(\lambda_1\) となる。(\(V_{z_1}=\lambda\)) 」
簡単なデータを使った簡単な計算例
例として、2次元データ(身長と体重のようなイメージ)を5人分だけ使います。
| サンプル | \(x_1\) | \(x_2\) |
|---|---|---|
| 1 | 2.5 | 2.4 |
| 2 | 0.5 | 0.7 |
| 3 | 2.2 | 2.9 |
| 4 | 1.9 | 2.2 |
| 5 | 3.1 | 3.0 |
まず平均を引いて中心化します。
\(\bar{x_1}=2.5+0.5+2.2+1.9+3.15=2.04\)
\(\bar{x_2}=2.4+0.7+2.9+2.2+3.05=2.24\)
中心化したデータ行列(平均を引いた値):
| サンプル | \(x_1 – \bar{x}_1\) | \(x_2 – \bar{x}_2\) |
|---|---|---|
| 1 | 0.46 | 0.16 |
| 2 | -1.54 | -1.54 |
| 3 | 0.16 | 0.66 |
| 4 | -0.14 | -0.04 |
| 5 | 1.06 | 0.76 |
次に共分散行列を計算すると
\(Cov(x)=\begin{aligned} \begin{pmatrix} 0.617 & 0.615 \\ 0.615 & 0.717 \end{pmatrix} \end{aligned}\)固有値 \(\lambda\) は次の特性方程式 を満たします。
\(\det(A – \lambda I) = 0\)
ここで \(I\) は単位行列です。
まず \(A – \lambda I\) を計算します。
\(A-\lambda I=\begin{aligned} \begin{pmatrix} 0.617-\lambda & 0.615 \\ 0.615 & 0.717-\lambda \end{pmatrix} \end{aligned}\)行列式は,
\(\det(A – \lambda I)\)
\(= (0.616555 \times 0.716555) – (0.616555 + 0.716555)\lambda + \lambda^2 \)
したがって,
\(\det(A – \lambda I) = \lambda^2 – 1.33311\lambda + (0.4413 – 0.3788)\)
\(= \lambda^2 – 1.33311\lambda + 0.0625\)
解の公式より
\(\lambda = \displaystyle\frac{1.33311 \pm \sqrt{(1.33311)^2 – 4 \times 0.0625}}{2}\)
\(\lambda_1 = \frac{1.33311 + 1.236}{2} \approx 1.284\)
\(\lambda_2 = \frac{1.33311 – 1.236}{2} \approx 0.049\)
この共分散行列の固有値を計算すると,
\(\lambda_1 = 1.2840\)
\(\lambda_2 = 0.0491\)
対応する固有ベクトルは
\(v_1=\begin{aligned} \begin{pmatrix} -0.678\\ -0.735 \end{pmatrix} \end{aligned}\) \(v_2=\begin{aligned} \begin{pmatrix} -0.735\\ 0.678 \end{pmatrix} \end{aligned}\)第一主成分は \(v_1\), 第二主成分は \(v_2\) に対応します。
主成分得点は「中心化データ × 固有ベクトル」で求めます。
例:サンプル1 \((0.46, 0.16)\) の場合
\(z_2 = 0.46 \times (-0.735) + 0.16 \times 0.678 = -0.089\)
同様に計算すると主成分得点行列(Z)は:
| サンプル | PC1 | PC2 |
|---|---|---|
| 1 | -0.404 | -0.089 |
| 2 | 1.616 | 0.082 |
| 3 | -0.225 | -0.461 |
| 4 | -0.416 | 0.009 |
| 5 | -0.571 | 0.460 |
おわりに
参考文献:多変量解析法入門 (ライブラリ新数学大系 E20) [ 永田 靖 ]
さいごまで読んでいただきありがとうございました!
- 大学受験数学で困っている方
- 公務員試験の数学で困っている方
- 統計学(統計検定)の勉強で困っている方
個人家庭教師やってるので、ぜひコメントやXでご連絡ください。(Xはこちら)
私自身、数学に関して順風満帆に理解できてきたわけではありませんでした。
周りを見渡せば数学の天才がゴロゴロいて、そんな人たちに比べれば私は足元にも及びませんでした。
だからこそ、わからない、理解できない方の気持ちを少しはわかってあげられると自負しております。
数学に困っている方の一助になれれば幸いです。
ご連絡お待ちしております。



質問や感想はコメントへ!