1.はじめに
今回は、カーネル法についてまとめます。
2.カーネル法
SVM等で非線形問題を解くときに、トレーニングデータを射影関数φを使って高次元の特徴空間に射影して学習し、学習後に同じ射影関数φを使って元に戻して解く方法をカーネル法と言います。
$f(x)=b+\sum_{i=1}^m \alpha_ix^Tx^{(i)}=b+\sum_{i=1}^m \alpha_i*\phi(x)*\phi(x^{(i)})$
但し、この方法には1つ問題があって、射影する特徴空間の次元数が非常に高くなってしまうことが多く、新しい特徴量 $\phi(x),\ \phi(x^{(i)})$ を生成する計算コストが非常に高くなってしまいます。
そこで、射影関数の内積結果 $\phi(x)* \phi(x^{(i)})$ を既知の変数だけで計算する手法を カーネルトリックと言い、その条件を満たす関数 $f(x,x^{(i)})=\phi(x)* \phi(x^{(i)})$をカーネル関数と言います。
3.カーネル関数
よく使われるカーネル関数は、
1)多項式カーネル
$K(X_i,X_j)=(X_i^TX_j+c)^d$
2)ガウスカーネル
$K(X_i,X_j)=exp
\begin{bmatrix}
-\frac{||x_i-x_j||^2}{2 \sigma^2}
\end{bmatrix}$
3)シグモイドカーネル
$K(X_i,X_j)=tanh(bX_i^TX_j+c)$
4.多項式カーネルの導出
2次元から3次元へ射影する下記の式を考えます
$\phi(x)=\phi(x_1,x_2)=(x_1^2, \sqrt2 x_1x_2, x_2^2)$
すると、射影関数の内積は、
$\phi(x)^T\phi(y)=(x_1^2,\sqrt2 x_1x_2,x_2^2)^T
(y_1^2,\sqrt2 y_1y_2,y_2^2)$
$=x_1^2y_1^2+2x_1y_1x_2y_2+x_2^2y_2^2=
(x_1y_1+x_2y_2)^2$
$=((x_1, x_2)^T(y_1, y_2))^2=(x^Ty)^2$
つまり、射影関数の内積は、元のベクトルの内積の二乗で表せるわけです。
これは、多項式カーネルの c=0, d=2 の場合に相当します。