機械学習:特徴量の抽出 KernelPCAを使った非線型写像

非線形問題をKernelPCAを使い、線型分類が可能である新しい低次元空間に写像する方法で、一旦線形分類できる高次元空間を経由し、高次元空間でのPCAにより、線型分離可能を保ったまま低次元空間に写像を行う方法です。 カーネルトリックとは、カーネル関数で置き換えることで、写像された特徴量の内積とそれから算出する固有値を直接計算することを避けるテクニックです。固有値も計算しないので、変換行列はなく、中心化されたカーネル行列の固有値の上位の$${k}$$個の固有ベクトルが、写像後の特徴量となります。
 最もよく使われるカーネルは以下の三つです。

  • 多項式カーネル $${\Kappa(\bf{x}^{(i)},\bf{x}^{(j)}) = (\bf{x}^{(i)T}\bf{x}^{(j)} +\theta)^{p}}$$ $${\theta}$$は閾値で、 $${p}$$はユーザが決める。

  • 双曲線正接カーネル $${\Kappa(\bf{x}^{(i)},\bf{x}^{(j)}) = \tanh (\eta \bf{x}^{(i)T}\bf{x}^{(j)} + \theta)}$$

  • Gauss Kernel $${\Kappa(\bf{x}^{(i)},\bf{x}^{(j)}) = \exp(-\frac{\| \bf{x}^{(i)}-\bf{x}^{(j)} \|^2}{2\sigma^2})}$$、または$${\gamma=\frac{1}{2\sigma^2}}$$として、 $${\Kappa(\bf{x}^{(i)},\bf{x}^{(j)}) = \exp(-\gamma\| \bf{x}^{(i)}-\bf{x}^{(j)} \|^2)}$$ とも表す

Gauss Kernelを使ったKernel PCAの手順

  1. $${n \times n}$$のKernel行列$${{\bf \Kappa}}$$を求める。$${\Kappa_{ij}=\kappa(\bf{x}^{(i)}, \bf{x}^{(j)})=\exp(-\gamma\|\bf{x}^{(i)}-\bf{x}^{(j)}\|^2)}$$

  2. Kernel行列の中心化。特徴量を標準化していないので、ここで行列の行方向と列方向の成分の平均値をゼロにする。$${n \times n}$$の$${{\bf 1}_n=1/n {\bf 1}}$$を使い、$${{\bf \Kappa}' = {\bf \Kappa} - {\bf 1}_n{\bf \Kappa}-{\bf \Kappa}{\bf 1}_n+{\bf 1}_n{\bf \Kappa}{\bf 1}_n}$$

  3. $${{\bf \Kappa}}$$の固有値を求め、上位$${k}$$個の固有値に対応する固有ベクトルをとり、これを変換後の特徴量とする

カーネル関数の変数、$${\gamma, \theta}$$はグリッドサーチ等を使い、最適な値を見つけた方が良い。



この記事が気に入ったらサポートをしてみませんか?