主成分分析 (principal component analysis) |
2017-10-17 - 2018-05-30 (update) |
|
|
*主成分分析とは
与えられたN次元のデータ群から,ばらつきの大きい(或いは小さい)方向を調べる計算手法です.図1は2次元の点群から,主成分分析を行った結果を表します.
[img:ynvx]
{{small:図1 左図は入力の2次元の点群,右図の赤線は第一主成分,青線は第二主成分}}
ここで,最もばらつきの大きい方向を第一主成分,それに垂直で次にばらつきの大きい方向を第二主成分,というように名前がついています.
主成分分析について詳しく学びたい場合,[1]の文献が参考になります.
{{small:[1]金谷健一, "これなら分かる応用数学教室―最小二乗法からウェーブレットまで", 共立出版, 2003}}
{{small:[link:https://www.amazon.co.jp/これなら分かる応用数学教室―最小二乗法からウェーブレットまで-金谷-健一/dp/4320017382] }}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/sp/pca
2次元の点群や,784次元の手書き文字の画像を対象に主成分分析を行います.
*主成分分析の計算手順
2次元の点群を入力とした例で,主成分分析を行う場合の計算手順を説明します.ここで入力の2次元の点群は,次の様に定義します.
{$$
M = \begin{bmatrix} P_{x0}&P_{y0} \\ P_{x1}&P_{y1} \\ \vdots&\vdots\end{bmatrix}
$$}
まずは点群の平均を求め,点群を表す座標軸を平均の位置に移動させるように元の点群から平均を引きます.移動後の点群を{$M'$}とします.
次に,{$M'$}の共分散行列{$C$}を計算します.
{$$
C = M'^\mathrm{T} M'
$$}
共分散行列{$C$}は2行2列の行列になります.最後に,共分散行列{$C$}を固有値分解し,固有値と固有ベクトルを計算します.ここで,最も固有値が大きい固有ベクトルが第一主成分,次に固有値が大きい固有ベクトルが第二主成分です.
*3次元の例
3Dセンサなどで計測した形状の各部位の面の方向(法線方向)を得るために,良く主成分分析が利用されます.例えば点群の各部位について主成分分析を行って,第三主成分つまり最もばらつきの小さい方向を調べることで,その形状の法線方向を得ることができます.
[img:ymrv]
{{small:図2 3次元点群に対する主成分分析}}
*画像の例
画像は画素数分の次元のデータとみなすことができます.平均値を基準に主成分を見ると,画像群のばらつきの大きい部分が分かります.また主成分の情報を手掛かりに,特徴抽出や画像圧縮に応用する方法もあります.
[img:rkpf]
{{small:図3 画像群と,その平均,第一主成分,第二主成分・・}}
>> ご意見・ご質問など お気軽にご連絡ください.info