主成分分析(PCA)がなぜ分散共分散行列を対角化する固有値問題となるか

主成分分析(principal component analysis:PCA)とは?

教師なし学習の一つ。 データの分散(ばらつき)が大きいところ(主成分)を見つける操作。 つまり分散が大きいところが大事で、小さいところは気にしないようにする。

既存の特徴を組み合わせて分散が大きくなる新たな尺度となる特徴を見つける。 例えば、2つの特徴を組み合わせて1つの特徴でその対象を上手く捉えることができたら、 パラメータを減らせる。

f:id:yusuke_ujitoko:20170304192428p:plain

  • PCAのアルゴリズム

    1. 全データの重心を求める(平均値)
    2. 重心からデータの分散(ばらつき)が最大となる方向を見つける
    3. 新しいデータ表現軸として、2.で求めた方向を基底とする
    4. 上記でとった軸と直交する方向に対して分散が最大となる方向を探す。
    5. 2.~3.をデータの次元分だけ繰り返す
  • PCAの目的

    • データの特徴抽出
      • データのバラつきが大きい部分に着目することでよいデータを識別しやすくする
    • データの次元圧縮
      • データのバラつきが少ない部分はデータに共通するパターンなのであまり意味をなさない(無視)
    • 多次元特徴量の可視化
      • 多次元データは人間には認識不可
      • データのバラつきが大きところを見ることでデータの関係性を把握

主成分分析がなぜ分散共分散行列を対角化する固有値問題となるか?

訓練データ {x_{i} = (x_{i1}, .. , x_{id})^{{T}}(i = 1, .. ,N)}分散が最大になる方向を求める。
{N} 個のデータからなるデータ行列: {X = (x_{1}, .. x_{N})^{\mathrm{T}}}
{N} 個の訓練データの平均ベクトル: {\bar{x}=(\bar{x_{1}} .. ,\bar{x_{d}})^{\mathrm{T}}}
平均ベクトルを引き算したデータ行列: {\bar{X}=(x_{1} - \bar{x} .. ,x_{N} - \bar{x})^{\mathrm{T}}}
とすると、平均化訓練データ行列の分散は

$$ \sum = Var({\bar{X}}) = \frac{1}{N}\bar{X}^{\mathrm{T}}\bar{X}\ $$

で定義される。

単位ベクトル: {a = (a_{1}, \cdots , a_{d})^{T}} とすると、{N} 個のデータ {x_i - \bar{x}} の単位ベクトル {a} への正射影は

$$ s_i = (s_{1}, .. ,s_{d})^{\mathrm{T}} = \bar{Xa} $$

となる。 この変換後のデータの分散は、

$$ Var({{s}}) = \frac{1}{N}{s}^Ts = \frac{1}{N}(\bar{Xa})^{\mathrm{T}}(\bar{Xa}) = \frac{1}{N}{a}^T\bar{X}^{\mathrm{T}}\bar{Xa} = a^TVar({{\bar{X}}})a $$

となる。この分散が最大となる単位ベクトル {a} は、係数ベクトル{a} のノルムを1となる制約があること利用して、 ラグランジェの未定乗数法を使って求める。

$$ E(a) = a^TVar({{\bar{X}}})a - \lambda(a^T a - 1) $$

を最大にする{a}を見つければよい、{\lambda}はラグランジェ未定定数である、{a}微分して0としておけば、

{\frac{\partial E(a)}{\partial a} = 2 Var({{\bar{X}}})a - 2\lambda a = 0} より {Var (\{\bar{X}\})a = \lambda a}

となる。 この式は元のデータの共分散行列に関する固有値問題を解くことに等しいので、 分散最大となる単位ベクトル {a}固有値問題を解いて求めた固有値固有ベクトルの中で、 最大固有値に対応する固有ベクトル{a}とすればよい。