SVM(Support Vector Machine)は2クラスの分類を行う学習機械の一種で、与えられた訓練点のなかでサポートベクトルと呼ばれるクラス境界近傍に位置する訓練点と識別面との距離であるマージンを最大化するように分離超平面を構築しクラス分類を行います。線形で分類が難しい際には、カーネルトリックによって入力空間をより高次の特徴空間に写像し、そこで線形分離を行うことで非線形の問題にも適用が可能です。従来パターン認識の分野で良く用いられていた逆誤差伝播法によって学習を行う多層パーセプトロンに比べ、
という特徴を持っています。
汎化性能とは簡単に言ってしまうと、学習に用いていない未知のデータに対して識別を行った際の性能のことです。多層パーセプトロンでは理論的に中間層のユニット数を多くすることで、学習データを完全に分類可能、つまり経験損失をゼロとすることができます。しかし、多くの場合、経験損失をゼロにはできなくとも少数の中間層からなるネットワークが利用されます。これは中間層のユニット数が増えすぎると過学習が生じ、その結果汎化性能が低下するためです。一般に多層パーセプトロン等の学習機械における学習はあくまで経験損失を最小化するためのものであり、真の期待損失が最小化するわけではないため汎化性能は保証されません。そのため、汎化性能はAICなどの情報基準量やクロスバリデーション法やブートストラップ法を用いて統計的に評価されます。
一方、SVMはマージンを最大化するように分離超平面を構築することで高い汎化性能を持ちます。SVMの高い汎化性能についてはPAC(Probably Approximately Correct)学習の枠組みから識別関数のクラスの複雑さの測度であるVC次元を用いてその誤差の上界を見積もることで理論的な裏づけが行われています。線形識別関数のVC次元は入力データの次元がnの場合n+1になりますが、入力データが半径Rの超球内に存在しマージンγが与えられたとき、VC次元とほぼ同じように振舞うγ-shattaring次元がR^2/γ^2で抑えられるのでマージンが大きければその分汎化性能が大きくなります。実際にはソフトマージンを使うとスラック変数を考慮しなければならなかったり、本当はLuckinessの概念を導入しなければいけなかったりと厄介な話なのですが、とりあえずマージンが大きくなるように分離超平面が構築できれば良い汎化性能が得られるということです。
SVMによる分類を行うには、自分の手でコードを一から書かなくともKernel MachinesのページにSVMを利用するためのライブラリ、アプリケーションが数多く登録されています。ただ、この一覧を見ただけでは数が多すぎてどれを利用してよいのか困ってしまいます。そこでいくつかのメジャーなものについてその特徴をまとめてみました。
SVMlight