マージンとカーネル(短く)

このページは、SVM の説明でよく出る マージンカーネルだけを、式の厳密展開なしに固定するメモです。全体像は 概要、流れの史は SVM 史 を参照してください。

マージンとは

二値分類で 線形境界(超平面) があるとき、各クラスの点のうち 境界にいちばん近い点までの距離(のような量)が マージンのイメージです。SVM の典型目標は、このマージンを 大きくすることです。マージンが大きいほど、小さなノイズで境界がすぐ崩れにくい、という幾何的な直感が語られます。

サポートベクトルは、ちょうどそのマージンの端に乗る(またはペナルティで効く)点で、境界の位置を 実質的に決める少数の点です。

ソフトマージン(一言)

データが完全に分離できないとき、スラック変数で「どれだけ間違えを許すか」を入れ、マージンを広げること誤分類を減らすことのトレードオフを ハイパーパラメータ C で調整します。C が大きいほど誤分類を嫌い、マージンは狭くなりやすい、という読み方ができます(実装依存の細部はライブラリのドキュメント参照)。

カーネルとは(直感)

線形 SVM は 元の特徴空間で 超平面を引きます。一方、境界を 曲線にしたいとき、理論的には 特徴を別の高次元空間へ写像してから線形境界を引けばよい、という考え方があります。

カーネル法は、その高次元での内積を 元の入力のペアだけから計算できる関数 (K(x, x')) として書き下ろす工夫です。写像を明示的に作らずに 同じ最適化問題を解ける、というのが カーネルトリックの要点です。

入力を明示的に高次元へ写像するとは

写像とは、もともと持っている特徴ベクトル (x) を、別のベクトル (\phi(x)) に 決まったルールで変換することです。次元が 増えるように設計すると、それが「高次元へ写像」です。

  • 元の空間:例として (x = (x_1, x_2)) のように次元が 2
  • 写像後:(\phi(x) = (x_1,\ x_2,\ x_1^2,\ x_2^2,\ x_1 x_2)) のように次元が 5

ここで (\phi) が「ルール」です。プログラム的には「元の列から 新しい列を式で追加する」と考えると分かりやすいです。

なぜそんなことをするか:線形 SVM は 超平面(直線の高次元版)でしか切れません。元の 2 次元平面上では、円の内側と外側のように 曲線でしか分離できない配置がある一方、上のように 平方項や掛け算項を特徴に足すと、写像後の 5 次元空間では 平面一枚でクラスが分離できる、ということが起こります。つまり 元空間では曲がった境界が必要な問題を、高次元では直線(超平面)問題に直している、というイメージです。

明示的とは、学習の前に (\phi(x)) の各成分を 実際に計算してベクトルとして持つやり方を指します。次元が「元の数倍」なら現実的ですが、次数の高い多項式のように次元が爆発したり、RBF のように理論上は 無限次元に相当する写像を想像する場合、(\phi(x)) を全部 materialize するのは困難です。

そこで カーネル (K(x, x') = \phi(x)^\top \phi(x')) を使うと、(\phi(x)) 自体を並べなくても、学習に必要な ペアの内積だけを (K) から取り出せます。これが「写像を 明示的に 作らない」という説明の対比になります。

よく名前が出る例:

  • 線形カーネル:写像なし(線形 SVM)
  • 多項式カーネル
  • RBF(ガウシアン)カーネル:局所的な「うねり」を表現しやすく、実務でよく使われた

カーネルやパラメータ(例:RBF の γ)の選び方は性能に効くため、検証データでの比較が現実的です。

関連