++C++; // 未確認飛行 C 避けて通れない「非同期処理」を克服しよう

Top総合 目次線形代数

主成分分析

このエントリーをはてなブックマークに追加

目次

キーワード

概要

固有値問題の応用の1つとして、主成分分析を紹介。

記号の準備

これから説明する主成分分析は、 N 個のベクトル x1 , x2 , ・・・, xN に対して、その線形結合

y
N
i=1
ai xi

を考えます。 N 個の線形結合を考えて、

y i
N
j=1
ai j xj

として考える場合もあります。 ベクトル xi の次元は特に限定しませんが、 内積が定義できるベクトル空間の元であることを仮定します。

N 個のベクトル列 x1 , x2 , ・・・, xN を、1まとめにして、

X = (x1 x2 ・・・ xN)

と表現します。 xiM 次の縦ベクトルの場合には、 これは M×N 行列に相当します。 また、係数 ai j も行列として表現します。

a i( ai 1 , ai 2 , ・・・, ai N)T
A = {ai j}(a1 , a2 , ・・・, aN)

この記法に従うなら、先ほどの線形結合の式は、

y i = X ai
Y = X A    ただし、 Y = (y1 y2 ・・・ yN)

となります。

また、2つのベクトル xi, xj の内積を

( x i , xj)

で表します。 そして、ベクトル列 X相関行列(correlation matrix) RX

RX = XT X = {(xi , xj)}

と定義します。 (ベクトル/行列の右肩の T は転置を表します。) X の各ベクトル xi の次元がなんであれ、 RXN 次の正定値で対称な正方行列になります。

ちなみに、Y = X A のとき、

RY = YT Y = AT XT X A = AT RX A

と表すことができます。

主成分分析

主成分分析にはいくつか表現のしかたがあります。 (結局は同じ式、同じ結果に帰着。)

線形結合結果の絶対値最大化

1つ目は、ベクトル列 X の線形結合

y
N
i=1
ai xi = X a

に対して、 |a|2 = 1 という制約条件化で、 y の絶対値 (y, y) の値を最大化したいというものです。

その結果得られるベクトル y は、 N 個のベクトル列 X = x1 , x2 , ・・・, xN を最もよく代表する1本のベクトルと考えることができます。 「最もよく代表するベクトル」という意味で、 y をベクトル列 X の(第一)主成分と呼びます。

主成分の求め方ですか、 条件付極値問題になりますので、 ルジャンドルの未定乗数法を使って、

( y, y) - λ (|a|2 - 1 )aT RX a - λ (|a|2 - 1 )

の極値問題に帰着されます。 したがって、この式を、a の各要素で微分することで、

RX a = λ a ,    |a|2 = 1

という条件が得られ、 相関行列 RX の固有値問題に帰着されます。

N 次正方行列の固有値問題の解は N 個ありますが、 このうち、 (y, y) を最大化するという条件を満たすのは、 絶対値が最大の固有値に属する固有ベクトルです。

ちなみに、 最大固有値以外の固有ベクトルを用いても同様に y に相当する物が得られるわけですが、 これを、固有値が大きい順に 第一主成分、第二主成分・・・と呼びます。

ベクトル列の直交化

もう1つの考え方としては、 ベクトル列 X を、 直交変換 A によって直交したベクトル列 Y に変換するという考え方です。 要するに、

Y = X A

というベクトル列 X → ベクトル列 Y の変換において、 AT A = IIN 次単位行列) という制約の元、 YT Y = RY を対角化したいというものです。 (対角化の問題は、結局の所、固有値問題になります。)

まず、RY が対角行列になって欲しいわけで、 これを

RYdiag{(yi , yi)}

と書きます。 (ただし、diag{λi} は、 ii 列の対角成分が λi であるような対角行列。) このとき、 Y = X A のとき、 RY = AT RX A なので、

diag { ( y i , yi) } = AT RX A

となります。 また、A が直交変換、 すなわち、A-1 = AT という条件から、

RX A = A diag{(yi , yi)}

が得られます。 これを、A に関して列ごとに書き下すと、

RX ai(yi , yi) ai ,    |ai|2 = 1

となり、 やはり、 相関行列 RX の固有値問題に帰着されます。 (このとき、 (yi , yi)RX の固有値になる。) ただし、固有値が 0 のときは ai = 0 とします。

この際に得られる、 固有ベクトルは、固有値の大きい物から順にならべておく習慣があります。 すなわち、

( y 1 , y1)(y2 , y2) > ・・・ > (yN , yN)

となるように、 a1 , a2 , ・・・, aN を並べます。

まとめ

要するに、以下のような手順でベクトル列 X を ベクトル列 Y に変換する手法を 主成分分析(principal component analysis)と呼びます。

  • X相関行列RX の固有値・固有ベクトルを求める。
  • 求めた固有ベクトルを、固有値が大きい順に a1 , a2 , ・・・, aN と並べる。 このとき、各固有ベクトルは絶対値を 1 に正規化しておく。 (|ai| = 1
  • X を、行列 A = (a1 , a2 , ・・・, aN) を使って変換する。 Y = X A

このとき、以下のことが成り立ちます。

  • A は直交変換。 すなわち、i ≠ j のとき、 aiTaj = 0。 また、逆変換は X = Y AT と表せる。
  • Y の各列 yi は互いに直交。 すなわち、i ≠ j のとき、 (yi , yj) = 0
  • y i はベクトル列 X の第 i 主成分。

ちなみに、ベクトル列 X が互いに強い相関を持っているような場合、 yi の絶対値は、 極端に第一主成分 y1 に偏ります。 逆に、X が互いに弱い相関を持つ場合、 yi の絶対値には偏りが少なくなります。

また、N 個のベクトルのうち、 線形独立なベクトルが MM < N)本しかない場合、 yiM 個目までが非0で、 残りは零ベクトルになります。

確率変数の主成分分析

主成分分析の考え方は、 内積、あるいは、内積に類する性質の演算を定義できる線形空間なら何にでも適用できます。

その一例として、確率変数の主成分分析について少し触れておきます。 ベクトルの内積の代わりに、確率変数に対しては共分散を用います。 (ベクトルの直交性は、確率変数の場合は相関性にあたる。直交 = 無相関。) 2つの確率変数 x, y の共分散

Cov [x, y]E[xy]E[x]E[y]

E[x]x の期待値。) を用いて、 N 個の確率変数の列 x1 , x2 , ・・・, xN の共分散行列 CX を以下のように定義します。

CX{Cov[xi , xj]}

そして、 共分散行列 CX の固有値問題を解くことで、 前節で述べたベクトルの主成分分析と同様の議論が可能です。 このような手法を確率変数の主成分分析といいます。

[お問い合わせ](q)