カーネルトリック
写像
ソフトマージンで線形分離不可能な場合でも、分離超平面を決定することができますが、 所詮線形分離なので、性能には限界があります。
そこで、入力を適当な非線形変換を使って、 より高次元な特徴空間へ写像することを考えます。
例えば左の図で赤丸と青丸は線形分離出来ません。 そこで、元の特徴空間を非線形変換し、 に写像します。 すると、右図のような分布になり、直線で分離することが可能になります。
カーネルトリック
上の例では、二次元から二次元の写像でしたが、複雑な問題なるとより大きな次元に写像する必要があります。 次元があまりにも大きくなると、写像を求めるのは大変になってきます。
しかし、SVMの場合、実は実際に写像を求める必要はなく、ベクトルの内積だけ分かれば計算ができます。 この写像した特徴空間の内積は、当然もとの特徴ベクトルの関数になっているはずです。 そこで、写像した特徴空間の内積を関数Kで表すことにします。
この関数をカーネル関数といいます。 カーネル関数さえ求まれば、を具体的に求める必要はありません。 を具体的に求めなくても計算ができてしますので、この手法をカーネルトリックと言います。 有名なカーネルとしては、次のようなものがあります。
多項式カーネル
ガウシアンカーネル
実際にやってみよう
2変数の場合のカーネルトリックを使ったSVMです。カーネルにはガウスカーネルを使用しています。 赤の点と、青の点を、黒い線で分けます。各点はドラッグ&ドロップで動かせるのでいじってみてください。
下ある二本のスライドバーは上がCパラメータ、下がガウスカーネルのパラメータσの調整用です。 Cパラメータは右に行くほど大きく(つまりハードマージンSVMに近く)、 σは右に行くほど大きくなります。