The discretion of a man deferreth his anger

; and it is his glory to pass over a transgression (Prov. 19:11 KJV) - このブログは基本的に画像処理やRTMなど技術に関することを書き連ねていきます。

相変わらずPCAごときで躓く

なんっちゅうか…かなりへこむけども、PCAが良く分かっていないということで。
まずもって、何をやっているかと言うのはこういうことです。
『16msのフレーム間隔, 8msのフレーム送りで作った音素ラベルの、2^n秒(1<=n<=6程度)毎の出現確率をベクトルの要素としたデータ群を、PCAで3次元に落としてkd-TreeとかOct-tree使ってHash化みたいに出来ないか?』というお話。
で、音素変換ではうちの研究室では前から岡教授が作ったSpectrum Vector Patternという方向性パターンを使ったデータをKL展開で50次元に落として、Bayes識別でもって音素に変えてるんだけども…まぁ、ノイズが乗ってるとか、音声だけじゃなくて音楽もバックに乗ってるとか、かなり過酷な条件で認識出来てるか…と言うのは置いといて、コーディングしたモノを単純にKL展開で3次元に落としたい…と。
で、PCAなんすよ。
PCAって、数理的な話をすると、N個の要素を持つベクトルh_iが、
X = \(\array{\\{h_1^T}\\{h_2^T}\\{\vdots}\\{h_M^T}}\)
な感じになっているとすると、XM \times Nの縦に長いMatrixになっていると。とりあえず、ここではXは、クラスの平均でもって既に引いてある、として、で、共分散行列をベクトルの要素に関してN \times Nの形で出すとすると、
V = \frac{1}{M} \sum^{M}_{\alpha}X_{\alpha}^T X_{\alpha}
になって、ここでこの共分散行列{tex:V}に対しての固有値問題に行くことになるんすよね?(で合ってると思うんだけど)
でまぁ、もうちょっと行くと、固有値出すやつとして、このケースだと、固有値を並べた対角行列\Sigmaと、各次数に準ずる固有ベクトルを並べたUという直交行列があって、
VU = U\Sigma
の形で書けるわけで、V固有値展開したとすると、V = U \Sigma U^Tという形で成るわけで…、後は、このUを使って、主軸変換を掛ければいいから、
h'_i = U^T h_i
と、 (U^T h_i)^T = h_i^T U とを考えると、
h'_i^T = h_i^T U
より、
X' = X U
と置けると。間違ってないかな…まぁ、Matlab上ではどうやら上手く行ってるようなので。
ここからがとりあえず問題。SVDでやろうとした場合での対応で、ここで言うとX^T Xの対応で、これをSVD掛けた場合、(ここからのVは共分散じゃないです)
 X^T = U \Sigma V^T
となって、 UN \times N行列、VはM \times M行列になるもののVMatlab上で切り捨て可能で…、そうすると、固有値に対する対角行列はこの場合も Uで、U^Tを右から両辺に掛けてやると、
U^T X^T = \Sigma V^Tとなって、このケースでもちゃんと主軸変換の定義に乗っ取れるので、後は
X' = (U^T X^T)^T = X U
として同じ扱い、と捉えて良かったんだよね…?(汗