SVM は support vector machine の略で、クラス間の境界をできるだけ大きなマージンで選ぶ分類器です。SVMとは何かをひとことで言うなら、単にグループを分けるのではなく、その間にできるだけ広く信頼できるすき間を残す、という考え方です。

その境界に最も近い点をサポートベクターと呼びます。これらの点は、分離境界をどこに置けるかを決めるため、特に重要です。

なぜマージンが重要なのか

クラス A の点の集まりと、クラス B の点の集まりがあると考えてみましょう。両者を分ける直線はたくさん引けるかもしれません。SVM は、その両側に最も大きな安全な余白を残す直線を選びます。

この広いマージンによって、分類器は訓練データの小さな変化に対して敏感になりにくいことがあります。実際の性能向上が必ず保証されるわけではありませんが、これが SVM の中心的な直感です。

SVM の決定境界はどのような形か

線形 SVM では、決定境界は超平面です。

wx+b=0w \cdot x + b = 0

分類器は、wx+b>0w \cdot x + b > 0 のとき一方のクラスを予測し、wx+b<0w \cdot x + b < 0 のときもう一方のクラスを予測します。

分離可能なデータに対する標準的な最大マージンのスケーリングでは、SVM は wwbb を次の条件を満たすように選びます。

yi(wxi+b)1y_i(w \cdot x_i + b) \ge 1

これはすべての訓練点について成り立ち、同時にマージンができるだけ大きくなるようにします。このスケーリングでは、マージン全体の幅は

2w.\frac{2}{\|w\|}.

実用上の大事な考え方は、式よりももっと単純です。この正規化された設定では、w\|w\| が小さいほどマージンは広くなります。

具体例:1次元の SVM

1次元の例を見ると、マージンの考え方がわかりやすくなります。

負例クラスの点が x=0x=0x=1x=1 にあり、正例クラスの点が x=4x=4x=5x=5 にあるとします。

1144 の間にあるしきい値なら、どれでもクラスを分けられます。たとえば x=2x=2 でも x=3x=3 でも分離できますが、両側の余白は同じにはなりません。

この1次元の分離可能な設定では、SVM は最も近い異なるクラス同士の点の中点を選ぶので、決定しきい値は

x=2.5.x = 2.5.

となります。最も近い負例の点は x=1x=1、最も近い正例の点は x=4x=4 です。これらがサポートベクターです。どちらも境界から 1.51.5 だけ離れているので、マージンはできるだけ広く、しかも左右対称になります。

この場合の分類器は、「x>2.5x > 2.5 なら正例、x<2.5x < 2.5 なら負例を予測する」と書けます。この単純な例が示しているのは、境界は遠くの簡単な点ではなく、近くにある判定の難しい点によって決まるということです。

ハードマージン SVM とソフトマージン SVM

ハードマージン SVM は、訓練データが完全に線形分離可能な場合にしか使えません。たった1点でもその条件を破る点があると、ハードマージンの設定ではデータに適合できません。

そのため、実用上の多くの SVM ではソフトマージンが使われます。ソフトマージン SVM も広いマージンを好みますが、いくつかの点がマージン内に入ったり、境界の反対側に入ったりすることを、ペナルティ付きで許します。

このトレードオフを制御するのがパラメータ CC です。CC が大きいほど違反へのペナルティは強くなります。CC が小さいほど柔軟性は高くなります。どちらが自動的に良いということはなく、データに依存するため、検証性能で確認する必要があります。

カーネル SVM が役立つとき

元の特徴空間では、直線的な境界だけでは不十分なことがあります。カーネル SVM は、カーネル関数を通して点同士を比較することでこれに対応します。これにより、巨大な変換後特徴ベクトルを明示的に書かなくても、曲がった境界を扱えるようになります。

重要なのは、その追加の柔軟性が本当に役立つのは、データのパターンが実際にそれを必要としている場合だけだということです。カーネルはモデルを改善することもありますが、調整を難しくすることもあるため、最初から当然の選択として使うのではなく、検証して判断すべきです。

SVM でよくある間違い

すべての点が同じように重要だと思う

SVM では、最も近い点が特に重要です。境界から遠い点は、最終的な分離境界にほとんど影響しないことがよくあります。

ハードマージンの前提条件を忘れる

完全な線形分離可能性は、実際に満たす必要がある条件であって、最初から成り立つ前提ではありません。クラスが重なっているなら、ソフトマージンか別のモデルが必要です。

特徴量のスケーリングを無視する

SVM は距離と内積に依存します。ある特徴量の尺度が他よりずっと大きいと、先に入力をスケーリングしない限り、その特徴量が境界を支配してしまうことがあります。

カーネルは自動的に優れていると思い込む

より柔軟な境界は訓練データにはよく適合するかもしれませんが、それがそのまま汎化性能の向上を意味するわけではありません。

SVM はどこで使われるか

SVM は、クラス間の境界が比較的はっきりしていて、マージンに基づく考え方が有効な分類問題で使われます。特に、小規模から中規模の表形式データの問題や、高次元の特徴空間がよく現れるテキスト分類でよく使われます。

また、support vector regression と呼ばれる関連手法によって回帰にも使われますが、それはここで説明した二値分類の設定とは別の枠組みです。

似た SVM の問題を試してみよう

例に出てきた1次元の点に、新たに x=2.2x=2.2 の負例を1つ追加してみてください。すると、きれいで広いすき間はなくなります。ハードマージンにこだわると何が変わるか、ソフトマージンを許すと何が変わるかを考えてみましょう。この比較は、SVM の考え方をつかむ最も速い方法のひとつです。

問題の解き方でお困りですか?

問題をアップロードすると、検証済みのステップバイステップ解答が数秒で届きます。

GPAI Solver を開く →