2つのグループを分ける線は無数に引けます。その中で「どちらのグループからも最も余裕をもって離れた線」を選ぶ——このシンプルで美しい発想がサポートベクターマシン(SVM)です。ディープラーニング以前の機械学習を代表する手法で、G検定ではマージン最大化・スラック変数・カーネルトリックの用語がまとめて問われます。

📖 ひと言でいうと

サポートベクターマシン(SVM)は、境界線の近くにあるデータ点(サポートベクトル)と境界線との距離(マージン)が最大になるように境界線を引いて、データを分類する手法です。

道路の白線引きに例えると、両側の建物すれすれに線を引くのではなく、両側から最も余裕のある真ん中に線を引くイメージです。余裕(マージン)が大きいほど、新しいデータが多少ずれても正しい側に収まりやすく、汎化性能が高くなります。

🖼 1枚でわかるサポートベクターマシン

SVM = マージン最大化で境界線を引く分類手法
  • マージン最大化 — サポートベクトルとの距離が最大の境界線を選ぶ
  • スラック変数 — どの程度の誤分類を許容するか調整できる
  • カーネル法 — データを高次元に写像して線形分類可能にする
  • カーネルトリック — 写像の膨大な計算量を抑えるテクニック
  • 位置づけ — ディープラーニング普及前の代表的な高性能分類器
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

SVM(Support Vector Machine)とも呼ばれる。異なるクラスの各データ点(サポートベクトル)との距離(マージン)が最大となるような境界線を求めることで、パターン分類を行う。この距離を最大化することをマージン最大化と言う。スラック変数を用いることで、どの程度誤分類を許容するか調整できるようになり、誤分類されたデータに寛容になる。SVMではデータをあえて高次元に写像することで、その写像後の空間で線形分類できるようにするカーネル法というアプローチがとられた。この写像に用いられる関数のことをカーネル関数と言う。計算量が非常に大きくなるため、カーネルトリックと言う手法を用いて計算量を抑えることができる。

この説明は、SVMの3段階の発展をそのままなぞっています。①基本形は「マージン最大化」で境界線を決める。②現実のデータはきれいに分けられないので「スラック変数」で誤分類をある程度許す。③そもそも直線では分けられないデータは「カーネル法」で高次元に写像してから分け、その計算量問題を「カーネルトリック」で解決する。この3段構えの流れで覚えると、用語同士の関係が整理できます。

🔍 しっかり理解する

サポートベクトルとマージン最大化

境界線の位置を決めているのは、実は全データではなく、境界線に最も近い少数のデータ点だけです。この点をサポートベクトル(境界を「支える」ベクトル)と呼び、手法名の由来になっています。SVMは、サポートベクトルと境界線との距離=マージンが最大になる位置に境界線を置きます。境界から遠いデータが多少増減しても境界は変わらない、という性質も特徴です。

スラック変数:誤分類への「寛容さ」

現実のデータにはノイズや外れ値が混ざっており、1点の誤分類も許さない厳格な境界(ハードマージン)を求めると、境界が引けなかったり、外れ値に引きずられた不自然な境界になったりします。そこでスラック変数を導入し、「はみ出し」をペナルティ付きで許容します(ソフトマージン)。どの程度誤分類を許すかは調整可能で、厳しくしすぎると過学習、緩めすぎると精度不足になるトレードオフがあります。

🅰 ハードマージン
  • 誤分類を1点も許さない
  • 完全に線形分離できるデータが前提
  • 外れ値に弱く、現実データでは使いにくい
🅱 ソフトマージン(スラック変数)
  • スラック変数で誤分類をある程度許容
  • ノイズを含む現実のデータに対応
  • 許容度はパラメータで調整する

カーネル法とカーネルトリック

平面上で2クラスが同心円状に分布しているようなデータは、どんな直線でも分けられません。しかし「中心からの距離」という新しい軸を加えて3次元に持ち上げると、平面(線形の境界)でスパッと分けられるようになります。これがカーネル法の発想で、データをあえて高次元空間に写像し、写像後の空間で線形分類します。写像に使う関数がカーネル関数です。

ただし高次元への写像を正直に計算すると計算量が爆発します。そこで使われるのがカーネルトリックです。SVMの計算では、写像後の座標そのものは実は不要で、データ同士の内積(類似度に相当する量)さえ分かれば境界が求められます。カーネル関数はこの内積を、写像を経由せず元の空間のまま直接計算できるため、高次元の恩恵だけを低い計算量で得られます。「写像したかのような結果を、写像せずに得る」のがトリックたるゆえんです。

💡 具体例で考える

SVMの代表的な成功例が手書き文字認識です。1990年代、郵便番号の手書き数字認識のベンチマーク(MNISTなど)でSVMは当時のニューラルネットワークと並ぶトップ級の精度を記録し、2000年代を通じて「まず選ばれる高性能分類器」の地位にありました。画素値をそのまま入力してもカーネル法が複雑な境界を表現してくれる点が強みでした。2012年のILSVRCでディープラーニングが台頭するまで、パターン認識の主役はSVMだったという歴史の流れは、G検定の文脈でも重要です。

もうひとつの定番が文書分類です。メールに含まれる単語の出現頻度を特徴量にしてスパム/非スパムを分ける場合、特徴量は数万次元と高次元になりますが、SVMはマージン最大化の性質から高次元でも過学習しにくく、テキスト分類で広く使われました。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • 「サポートベクトル=全データ点」は誤り — 境界線の決定に効くのは境界付近の少数の点(サポートベクトル)だけです。遠くの点は境界に影響しません。
  • カーネル法とカーネルトリックの混同 — カーネル法は「高次元に写像して線形分類する」というアプローチ、カーネルトリックは「その計算量を抑える」テクニックです。役割を入れ替えた選択肢が頻出です。
  • スラック変数の役割 — マージンを大きくする変数ではなく、「誤分類をどの程度許容するか」を調整する仕組みです。
  • 決定木との対比 — SVMは特徴量のスケールの影響を受けるため正規化などの前処理が重要で、判断根拠の説明も決定木ほど直感的ではありません。「説明が容易/スケール調整不要」は決定木側の特徴です。

📝 試験でのポイント

💡 ポイント
  • 「マージン最大化」という語が見えたらSVMと即断してよい、それほど強い対応関係です。
  • サポートベクトル(データ点)・マージン(距離)・スラック変数(誤分類の許容)・カーネル関数(写像)・カーネルトリック(計算量削減)の5用語の役割対応を問う問題が典型です。
  • 「あえて高次元に写像する」という一見逆説的な表現はカーネル法の説明です。次元削減と逆方向であることに注意してください。
  • ディープラーニング普及以前の代表的手法という歴史的位置づけも、章をまたいだ問題で問われます。

📚 まとめ

サポートベクターマシンは、サポートベクトルとのマージンが最大になる境界線を求めてパターン分類を行う手法です。スラック変数により誤分類をある程度許容して現実のデータに対応し、直線で分けられないデータにはカーネル法で高次元に写像して線形分類を可能にします。その計算量の問題を解決するのがカーネルトリックです。マージン最大化→スラック変数→カーネル法→カーネルトリックという発展の流れで整理しておけば、用語問題に迷いません。