はじめに
主成分分析(PCA:Principal Component Analysis)の理論について解説していきます。
具体例は示しますが、詳しい数学的な意味や数式などはこちらやこちらなどを参照下さい。
Pythonでの実装方法については別途記事(実装編)を書きましたので是非そちらを参照下さい。
※機械学習やプログラミング関係の内容を他にも投稿していますので、よろしければこちらの一覧から他の投稿も見て頂けますと幸いです。
主成分分析とは
**「与えられた特徴量から新たな特徴量(主成分)を作り出し、元の特徴量よりも少ない数の変数(次元)でデータを説明する」**手法とイメージすると分かりやすいと思います。文献などでは以下のような説明がなされています。
- 次元削減(可視化)の最も基本的な手法
- 多変量データをより少数のパラメータ情報に圧縮
- 2次元に圧縮することで、多次元データを可視化することが可能
- 座標系の回転変換(アフィン変換)を行い、より少ない座標軸でデータを説明
- 投射後のデータの散らばりが最大になるように、データをより低次元の空間に投影
- 教師なし学習の一種
主成分分析のイメージ
もともと変数1と変数2で説明されていたデータがあるとします。(図の左側)
このデータに主成分分析を適用し、新たに主成分1と主成分2を生成します。(図の右側)
主成分分析後のデータに関しては、主成分1のみで上手くデータが説明されていることが分かります。このように主成分分析を行うことで、もともとは2つの変数で説明されていたデータを1つの変数のみで説明できるようになりました。つまり、2次元が1次元に削減されました。このように主成分分析は新たな軸(主成分)を設定することで次元削減を行います。
主成分分析の具体例
化学のための Pythonによるデータ解析・機械学習入門に分かりやすい具体例が書かれていましたので、そちらを参考に紹介させていただきます。2つの特徴量x1, x2をもつ4つのデータからなるデータセットを考えていきます。データの内容と与えられた特徴量空間におけるデータの分布を示します。
このデータセットに対して主成分分析を実行すると、次のように各主成分(今回であれば第1主成分t1と第2主成分t2)が計算され、
第1主成分t1 vs 第2主成分t2 空間では4つのデータは以下のように存在します。
もとの4つデータを以下のように4行2列の行列_X_として考えます。
\mathbf{X}\
=
\begin{pmatrix}
x_1^{(1)} & x_2^{(1)} \\
x_1^{(2)} & x_2^{(2)} \\
x_1^{(3)} & x_2^{(3)} \\
x_1^{(4)} & x_2^{(4)}
\end{pmatrix}
=
\begin{pmatrix}
2 & 2 \\
1 & -1 \\
-1 & 1 \\
-2 & -2
\end{pmatrix}
また、2つの特徴量x1, x2それぞれを取り出したベクトルを以下のように_x_1, x2とします。
\\
\mathbf{x}_1\
=
\begin{pmatrix}
x_1^{(1)} \\
x_1^{(2)} \\
x_1^{(3)} \\
x_1^{(4)}
\end{pmatrix}
=
\begin{pmatrix}
2 \\
1 \\
-1 \\
-2
\end{pmatrix}
\\
\mathbf{x}_2\
=
\begin{pmatrix}
x_2^{(1)} \\
x_2^{(2)} \\
x_2^{(3)} \\
x_2^{(4)}
\end{pmatrix}
=
\begin{pmatrix}
2 \\
-1 \\
1 \\
-2
\end{pmatrix}
ここで、tを$t=x_1p_1+x_2p_2$のように特徴量x1, x2の線形結合で表すと、tは以下のように新しい軸となります。
p1, p2で表される線形結合の重みはローディングと呼ばれます。また、図において各サンプルからt軸に対して垂線を下した際のt軸上の座標をスコアと呼びます。スコアの二乗和が最大になるようなt軸のことを第1主成分軸と呼びます。スコアの二乗和の最大化は分散の最大化を意味し、1つの軸でなるべく多くの情報(データのばらつき)を表現できる軸を求めていることになります。詳細な計算は割愛しますが、ローディングに制約条件を設けてラグランジュの未定乗数法を用いることでp1, p2を求めていきます。計算の結果、次のようにp1, p2が求まります。
\\
\mathbf{p}_1\
=
\begin{pmatrix}
\frac{1}{\sqrt2} \\
\frac{1}{\sqrt2}
\end{pmatrix}
\\
\mathbf{p}_2\
=
\begin{pmatrix}
-\frac{1}{\sqrt2} \\
\frac{1}{\sqrt2}
\end{pmatrix}
よって、第1主成分t1と第2主成分t2はもとの特徴量x1, x2を用いて以下のようにあらわされます。
t_1=\frac{1}{\sqrt2}x_1+\frac{1}{\sqrt2}x_2 \\
t_2=-\frac{1}{\sqrt2}x_1+\frac{1}{\sqrt2}x_2 \\
sample1(x1, x2)=(2, 2)の第1主成分t1のスコアを求めると以下のようになります。
\begin{align}
t_1&=\frac{1}{\sqrt2}×2+\frac{1}{\sqrt2}×2 \\
&=2.82
\end{align}
寄与率について
表現できる情報量の割合は寄与率として表されます。寄与率は0から1までの値をとり、寄与率1であればもとの特徴量で表されていた情報がすべて表されていることを意味します。寄与率は主成分の分散を全情報量で割ることにより求められます。
ここで、例としてもとの特徴量が8つのデータに対する主成分分析を考えてみます。主成分の数は最小で1つ、最大でもとの特徴量と同じ数の8つです。主成分数8のときはもとの情報量をすべて表すことができているので累積の寄与率は1となり、情報の損失はありません。主成分分析の結果、次の2パターンの結果が得られたとします。
主成分に対して寄与率をプロットしたグラフを示します。
左側のパターンでは主成分数2で累積寄与率が0.9であることに対して、右側の例では主成分数が6で累積寄与率が0.9に到達していることが分かります。つまり、左側のパターンの方が少ない特徴量数(主成分数)で多くの情報量を表現できており、主成分分析による次元削減が効果的であることが読み取れます。(主成分分析では、累積寄与率が0.9程度となるまで主成分を選択するという基準などがあります)
主成分分析が上手く使えないシーン
- ①データが複数のクラスターからなる場合
- 主成分分析では座標軸の回転を行います。例えば、データがAというグループとBというグループからなる場合、どちらのグループに対しても同様の軸の回転が適用されます。よって、複数のグループ(クラスター)からなるデータでは主成分分析で上手く可視化できない可能性があります。その場合はグループごとに主成分分析を行うことが適切であると考えられます。
- ②特徴量間に非線形な関係がある場合
- 主成分分析ではもとの特徴量の線形変換によって新しい特徴量(主成分)が生成されます。よって、もとの特徴量間に非線形な関係性がある場合は主成分分析で上手く可視化できない可能性があります。非線形な次元削減の手法としてはt-SNE(t-distributed stochastic neighbor embedding)法やGTM(generative topographic mapping)などが存在します。
- ③データが標準化されていない場合
- もとの特徴量が標準化(平均値=0、標準偏差=1にする操作)されていない場合は主成分分析で上手く可視化できない可能性があります。
また、こちらには主成分分析時にデータを標準化することに関して議論されており参考になりました。
まとめ
主成分分析(PCA)の理論について解説致しました。**主成分分析は「もとの特徴量から新たな特徴量(主成分)を作り出し、もとの特徴量よりも少ない数の変数(次元)でデータを説明する」**手法です。多次元データの次元削減や可視化に有用です。