カーネルトリック

HOME>>メモ>>アルゴリズム>>SVM>>カーネルトリック

写像

ソフトマージンで線形分離不可能な場合でも、分離超平面を決定することができますが、 所詮線形分離なので、性能には限界があります。

そこで、入力$\bm x$を適当な非線形変換$\phi$を使って、 より高次元な特徴空間$\phi(\bm x)$へ写像することを考えます。

非線形写像

例えば左の図で赤丸と青丸は線形分離出来ません。 そこで、元の特徴空間$\bm x=(x,y)$を非線形変換し、$\phi(\bm x)=(x^2,y^2)$ に写像します。 すると、右図のような分布になり、直線で分離することが可能になります。

カーネルトリック

上の例では、二次元から二次元の写像でしたが、複雑な問題なるとより大きな次元に写像する必要があります。 次元があまりにも大きくなると、写像を求めるのは大変になってきます。

しかし、SVMの場合、実は実際に写像を求める必要はなく、ベクトルの内積だけ分かれば計算ができます。 この写像した特徴空間の内積は、当然もとの特徴ベクトルの関数になっているはずです。 そこで、写像した特徴空間の内積を関数Kで表すことにします。

$K(\bm x_1, \bm x_2)=\phi(\bm x_1)\cdot\phi(\bm x_2)$

この関数をカーネル関数といいます。 カーネル関数さえ求まれば、$\phi$を具体的に求める必要はありません。 $\phi$を具体的に求めなくても計算ができてしますので、この手法をカーネルトリックと言います。 有名なカーネルとしては、次のようなものがあります。

多項式カーネル $K(\bm x_1, \bm x_2)=(\bm x_1 \cdot \bm x_2 + 1)^d$

ガウシアンカーネル $K(\bm x_1, \bm x_2)=\exp\left(\frac{\displaystyle||\bm x_1-\bm x_2||^2}{\displaystyle 2\sigma^2}\right)$

実際にやってみよう

2変数の場合のカーネルトリックを使ったSVMです。カーネルにはガウスカーネルを使用しています。 赤の点と、青の点を、黒い線で分けます。各点はドラッグ&ドロップで動かせるのでいじってみてください。

下ある二本のスライドバーは上がCパラメータ、下がガウスカーネルのパラメータσの調整用です。 Cパラメータは右に行くほど大きく(つまりハードマージンSVMに近く)、 σは右に行くほど大きくなります。

SVGファイルをダウンロードする

残念ながら現在使用しているブラウザでは表示できません。 IE以外のブラウザの最新版をダウンロードしてください。