主成分分析の学習
mathTable of Contents
#+File Created:
#+Last Updated:
主成分分析の学習のきろく.
1 参考 URL
http://www-pse.cheme.kyoto-u.ac.jp/~kano/document/text-PCA.pdf
もう見れない様子
改めて探したらこっちに移ってた.
http://manabukano.brilliant-future.net/document/text-PCA.pdf
以下は, この pdf をよみながら勉強した記録である.
2 データ
(自分用)
以下のようなデータを想定する.
サンプル(測定サンプル)の id: \(n = 1 \ldots N\) (N 個のサンプル)
測定値(化合物) の id: \(p = 1 \ldots P\) (P 個の化合物の量)
サンプル 1 の測定値 \(\vec{x}_{1} = (x_{11}, x_{12}, \ldots ,x_{1P})\)
サンプル 2 の測定値 \(\vec{x}_{2} = (x_{21}, x_{22}, \ldots ,x_{2P})\)
…
サンプル N の測定値 \(\vec{x}_{N} = (x_{N1}, x_{N2}, \ldots ,x_{NP})\)
註: それぞれの変数 \(x_{np} (n=1 \ldots N)\) に対する平均値 = 0 に規格化されているとする.
すなわち, \(x_{11} + x_{21} + \ldots + x_{N1}=0\) などと規格化されているものとする
(上の式で列の足し算を計算してこれを 0 とするように変数変換しておく).
行列 \(X\) は以下のように定義する(\(N\) 行 \(P\) 列の行列).
測定値の種類(化合物. \(X\) における列)に対する名前を \(x_p\) と書く.
3 求めたいもの
情報の損失を最小限に抑えた新しい軸を作成する.
= 新しい軸(主成分)で計測したサンプル値の分散が最大となるように, 新しい軸を定める.
4 主成分軸の計算
測定値の種類(化合物. \(X\) における列)の名前を \(x_p\) とする.
列名 \(x_1, x_2, \ldots, x_p, \ldots, x_P\) に対して
主成分を以下のようにおく.
第一主成分 \(z_1\), 第二主成分 \(z_2\), \(\ldots\), 第 \(m\) 主成分 \(z_m\), \(\ldots\), \(z_P\)
第 \(m\) 主成分 \(z_m\) の係数 \(w_{pm} (p=1 \ldots P)\) に対する条件を以下のようにとる:
$$
\sum_{p=1}^{P} w_{pm}^{2} = 1
$$
(係数の自乗和 = 1 に制限することで \(w\) の値が具体的にきまる)
5 第一主成分
まず第一主成分を求める.
第一主成分の結合係数 \(w_1\) を以下のように書く.
$$
w_{1}^{T} = (w_{11}, w_{21}, \ldots ,w_{P1})
$$
\(T\) は転置を示す(\(w_{1}\) は列ベクトル).
上の標記を用いると,
$$
\sum_{p=1}^{P} w_{pm}^{2} = 1
$$
の条件は
$$
w_{1}^{T} w_{1} = 1
$$
と書ける.
サンプル \(n\) の測定値
$$
\vec{x}_{n} = (x_{n1},x_{n2}, \ldots, x_{nP})
$$
に対する第一主成分 \(z_1\) の値 \(t_{n1}\) は
$$
t_{n1} = \sum_{p=1}^{P} w_{pn} x_{np} = \vec{x}_{n} w_1
$$
\(t_{n1}\) を \(\vec{x}_{n}\) に対する第一主成分得点と呼ぶ.
\(N\) 個のサンプルに対して, 第一主成分 \(z_1\) に対する主成分得点ベクトル \(t_1\) を以下のように書く.
$$
t_{1}^{T} =(t_{11}, t_{21}, \ldots, t_{N1})
$$
これは, 以下のように書ける.
$$
t_{1} = X w_{1}
$$
第一主成分の分散 \(var_{z_1}\) は,
\(t_{1}\) の平均値は 0 であることに注意すると
\(var_{z_1} = \frac{t_{1}^{T} t_{1}}{N-1}\) と書け, 以下のように変形できる.
但し \(V = \frac{X^T X}{N-1}\) (共分散行列. \(P\) 次元の正方行列) とした.
第一主成分はその分散 \(var_{z_1}\) が最大値をとる.
\(w_{1}^{T} w_{1} = 1\) の条件下で \(w_1\) を求めるためには,
Lagrange の未定乗数法を用いるとよい.
を考え, \(J_1\) を最大にする \(w_{1}\) を求めれば, 第一主成分 \(z_1\) を求める事ができる.
\(J_1\) を \(w_1\) で偏微分し 0 とおく.
但し, \(I\) は \(P\) 次元の単位行列.
上の式は固有値問題にほかならない. 即ち \(w_{1}\) が 0 以外の解を持つためには
$$
det| V - \lambda I | = 0
$$
でないといけない.
固有値は, \(\lambda_1 > \lambda_2 > > \ldots > \lambda_P\) と \(P\) 個求められる
(大きい順から \(\lambda_1\), \(\lambda_2\) と書くことにする).
対応する固有ベクトルのうちのどれかが \(w_1\) となる.
一方, 第一主成分で計測した値の分散 \(var_{z_1}\) は,
1 行目から 2 行目への変換は, \(V-\lambda I = 0\) を用いた.
すなわち, 主成分で計測した値の分散は固有値と等しくなる.
第一主成分はそれで計測した値の分散が最も大きいものであるので,
第一主成分 \(w_1\) は, 固有値 \(\lambda_1\) に対応する固有ベクトルとなる.
6 寄与率(proportion)
http://manabukano.brilliant-future.net/document/text-PCA.pdf
主成分分析とは少数の統合的指標(主成分)を用いて変数間の関係や特徴を把握するための統計的手法である. 従って, 各主成分が元のデータに含まれる特徴をどの程度表現しているのか, あるいは何個の主成分を採用すれば元のデータに含まれる特徴を十分に表現できるのかを知ることが必要になる. このための指標として, 寄与率および累積寄与率がある.
合計 \(P\) 個の変数の分散の和は, その共分散行列を \(V\) とすると, \(V\) の \(p\) 行 \(p\) 列目要素 \(v_{pp}\) が \(x_p\) の分散に等しくなるので,
$$
\sum_{p=1}^{P} var_{x_p} = \sum_{p=1}^{P} v_{pp} = tr(V)
$$
一方, 第 \(m\) 主成分の分散 \(var_{z_m}\) は共分散行列 \(V\) の \(m\) 番目に大きな固有値 \(\lambda_m\) に等しいので,
$$
\sum_{p=1}^{P} var_{z_p} = \sum_{p=1}^{P} \lambda_p = tr(V)
$$
(一般に, すべての固有値の和=行列のトレース)
従って, 元の変数で計測した値の分散の総和 = 主成分で計測した値の分散の総和 となる.
そこで, 第 \(m\) 主成分が元のデータに含まれる特徴をどの程度表現しているかを示す指標として,
第 \(m\) 主成分(で計測した値)の分散が分散の総和に占める割合
$$
C_m = \frac{\lambda_m}{\sum_{p=1}^{P} \lambda_p} = \frac{\lambda_m}{tr(V)}
$$
を利用できる. \(C_m\) は寄与率(proportion)と呼ばれ, 通常 % を用いて示される.
第 \(m\) 主成分までの分散の和
$$
P_m = \sum_{i=1}^{m} C_i
$$
は累積寄与率(cumulative proportion) と呼ばれる.
7 因子負荷量(factor loading)
http://manabukano.brilliant-future.net/document/text-PCA.pdf
主成分は各変数の線形結合として与えられるので, その解釈のためには, 主成分と各変数との相関を 把握することにより主成分に強く影響を及ぼす変数を特定することが有効である.
そのための指標 因子負荷量は, 主成分と変数との相関係数として定義される.
第 \(m\) 主成分 \(z_m\) と \(p\) 番目の変数 \(x_p\) との間の因子負荷量は,
$$
r_{z_m,x_p} = \frac{var_{z_m,x_p}} {sd_{z_m} sd_{x_p}}
$$
ただし,
\(sd_{z_m}\) : 主成分 \(z_m\) (で計測した値)の標準偏差 = \(\sqrt{\lambda_m}\)
\(sd_{x_p}\) : 変数 \(x_p\) (\(N\) 個ある) の値の標準偏差
\(var_{z_m,x_p}\) : \(z_m\), \(x_p\) の共分散
主成分 \(z_m\) で計測した N 個のデータの値 \(t_{m}^{T} =(t_{1m}, \ldots ,t_{Nm})\) は,
$$
t_{1} = X w_{1}
$$
より,
$$
t_{m} = X w_{m}
$$
となる.
また, \(x_p\) に関しては, \(c_{p}^{T}=(0, \ldots ,1, \ldots 0)\) (\(p\) 番目だけが 1 の \(P\) 次元ベクトル)と書くと
$$
x_{p} = X c_{p}
$$
\(X w_m\) は \(t_m\) で, \(X c_p\) は \(x_p\). これらを要素毎に掛け合わせて足して, \(N-1\) (不偏分散を考えてる)で割る.
平均は 0 で規格化されてるからこの値が共分散となる.
これを展開していくと,
2 行目から 3 行目は \(V = \frac{X^{T} X}{N-1}\) より
4 行目から 5 行目は, \(2(V - \lambda_m I) w_{m}=0\) より
6 行目から 7 行目は, \(c_p\) は \(p\) 番目の要素を取り出す役割があるので.
従って, 主成分 \(z_m\) と変数 \(x_p\) の因子負荷量
(主成分 \(z_m\) で計測したデータの値 (N 次元ベクトル) と変数 \(x_p\) の値(N 次元ベクトル \(X\) の縦 1 列分)との相関係数)は
となる.
8 まとめ
8.1 主成分分析
\(V\) を分散共分散行列(\(P\) x \(P\) の行列)として
$$
V w = \lambda w
$$
固有ベクトル \(w_{m}\) が \(m\) 番目の主成分.
\(\lambda_m\) は 主成分 \(z_{m}\) で計測したデータの値(N 個ある)の分散の大きさ.
8.2 主成分得点
主成分 \(z_{m}\) に対するデータ \(\vec{x}_{n}\) の主成分得点は
$$
t_{nm} = \vec{x}_{n} w_{m}
$$
8.3 寄与率
1 つの主成分が元データの特徴をどの程度表現できてるか.
$$
\frac{\lambda_m}{\sum_{p}^{P} \lambda_{p}}
$$
8.4 因子負荷量
主成分軸と元の軸の相関係数
主成分 \(z_m\) で計測したデータの値と変数 \(x_p\) の値との相関
$$
\frac{\sqrt{\lambda_m} w_{pm}}{sd_{x_p}}
$$