【機械学習の王道】サポートベクターマシン(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
目的:
minw,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の内部数理(ラグランジュ双対)に迫る!
などのブログもご希望があればすぐ作成可能です📘 お気軽にどうぞ!