【機械学習の王道】サポートベクターマシン(SVM)とは?仕組み・数式・活用例まで徹底解説⚙️📈

「分類」といえば?——多くの機械学習モデルの中でも、**サポートベクターマシン(SVM)**はその代表格!

少ないデータでも高精度、次元が高くても大丈夫、ノイズにもそこそこ強い。
“シンプルなのに強い”モデルとして、いまなお幅広く使われています💪

この記事では、SVMの仕組み・数式・カーネルトリック・実用例までを分かりやすく解説します!


サポートベクターマシン(SVM)とは?

**SVM(Support Vector Machine)**は、データをできるだけ“きれいに”分ける境界線(または超平面)を探す分類モデルです。

ポイントは:

✅ データ間に**最大のマージン(余白)**を取る!
✅ 境界線に最も近いデータ(= サポートベクタ)だけに注目する!


SVMの基本アイデア🧠

以下のような2クラス分類を考えます:

クラスA:〇、クラスB:✕\text{クラスA}:〇、\quad \text{クラスB}:✕

このとき、AとBを分ける直線または超平面を見つけるのが目標です。

しかも、**できるだけ両クラスから離れた位置(マージン最大)**になるようにします。


数式で見るSVM(線形分離可能な場合)

境界線(超平面):

w⋅x+b=0\mathbf{w} \cdot \mathbf{x} + b = 0

目的:

min⁡w,b12∣∣w∣∣2subject toyi(w⋅xi+b)≥1\min_{\mathbf{w}, b} \frac{1}{2} ||\mathbf{w}||^2 \quad \text{subject to} \quad y_i(\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1

  • w\mathbf{w}:重みベクトル(境界の向き)

  • bb:バイアス(境界の位置)

  • yi∈{−1,+1}y_i \in \{-1, +1\}:正解ラベル

  • 最大マージン問題を「最小化問題」に置き換えて解く!


サポートベクタとは?

決定境界ギリギリにあるデータ点が「サポートベクタ」です。

このわずかな点だけが、最終的な境界線を決定します。
他のデータが多少変わっても、境界はほぼ影響を受けません!


カーネルトリック:非線形にも対応✨

線で分けられないときはどうする?

→ 解決策は「カーネル関数」を使って、高次元にマッピングしてしまうこと!

たとえば:

  • 線形:直線で分離(2次元)

  • 非線形:円・曲線で分離(高次元)

よく使われるカーネル関数👇

カーネル 数式 特徴
線形 x⊤x′\mathbf{x}^\top \mathbf{x'} 高速、シンプル
多項式 (x⊤x′+1)d(\mathbf{x}^\top \mathbf{x'} + 1)^d 非線形だが計算簡単
RBF(ガウシアン) ( \exp(-\gamma  

SVMのメリット・デメリット⚖️

✅ メリット

  • 少ないデータでも強い💥

  • 高次元でも性能が落ちにくい

  • 過学習しにくい(マージン最大化)

❌ デメリット

  • パラメータ(Cやγ)の調整がやや難しい

  • データ量が多いと遅くなる

  • マルチクラス分類は工夫が必要(一対他など)


Pythonで使ってみよう(scikit-learn)

from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

# データの読み込み
X, y = datasets.make_classification(n_samples=100, n_features=2, n_informative=2,
                                     n_redundant=0, n_clusters_per_class=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# モデル定義と学習
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)

# 精度評価
print("Accuracy:", model.score(X_test, y_test))

簡単にSVMを試せるのがPythonの魅力✨


活用例📊

分野 用途
医療 がんの良性・悪性分類
金融 与信リスク判定
画像処理 顔認識、手書き文字認識
自然言語処理 感情分類、スパムメール判定
製造業 不良品検出、パターン分類

まとめ📝

  • SVMは「マージン最大化」による強力な分類器

  • サポートベクタ」によって境界が決定される

  • カーネルトリックで非線形問題にも強い

  • 少量データ・高次元データに特に向いている!


発展編として、

SVM vs ロジスティック回帰の比較
カーネルSVMのハイパーパラメータ最適化
SVMの内部数理(ラグランジュ双対)に迫る!

などのブログもご希望があればすぐ作成可能です📘 お気軽にどうぞ!