IT用語集

サポートベクターマシン(SVM)とは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

UnsplashJelleke Vanooteghemが撮影した写真  

サポートベクターマシン(SVM)は、分類や回帰に使われる代表的な機械学習アルゴリズムです。仕組みは数式で語られがちですが、実務では「どんな問題に向くか」「何に注意して調整するか」を押さえるだけでも、選定と運用の判断がしやすくなります。この記事では、SVMの基本概念から、マージン最大化・カーネルの考え方、実装とチューニングの要点までを、要点を落とさずに整理します。

SVMとは何か

SVM(Support Vector Machine)は、教師あり学習のアルゴリズムの一つで、主に分類(例:スパム/非スパム)に用いられます。加えて、SVMの枠組みを回帰に拡張したSVR(Support Vector Regression)も広く使われています。

SVMの概要と特徴

SVMは、与えられたデータを最もよく分ける境界(超平面)を学習することで、未知データを分類します。実務上、SVMの特徴としてよく語られるポイントは次のとおりです。

  1. マージン最大化の考え方により、過学習を抑えやすい(ただし設定次第)
  2. 特徴量が比較的少ない・中規模のデータで強みが出やすい
  3. カーネルを使うと、非線形な境界でも扱える

一方で、学習コストやパラメータ調整の難しさといった注意点もあります。SVMは万能ではないため、向き・不向きを把握したうえで採用することが重要です。

SVMの基本的な仕組み

SVMの学習と推論の流れは、大まかに次の通りです。

  1. 学習データ(特徴量)と正解ラベル(クラス)を用意する
  2. クラスを分ける境界(超平面)を学習する
  3. 学習済みモデルで、新しいデータのクラスを推定する

SVMの核になる考え方は、境界とデータ点の距離(マージン)をできるだけ大きくすることです。直感的には、境界が「ぎりぎり」だと少しのノイズで誤分類しやすくなりますが、境界に余裕があると分類が安定しやすい、という発想です。

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

SVMは無数にあり得る境界の中から、マージンが最大になる境界を選びます。ここで重要なのが「サポートベクトル」です。

  • サポートベクトル:境界に最も近い(=マージンを決める)データ点
  • マージン:境界(超平面)からサポートベクトルまでの距離

サポートベクトル以外の点は、境界の位置に影響しにくい場合があります。そのため、SVMは「どのデータが境界の決定に効いているか」を説明しやすい側面もあります(ただし、カーネルSVMでは直感的な説明が難しくなることがあります)。

なお現実のデータでは、全点を完全に誤りなく分けられないことも多いため、SVMでは一般に「多少の誤分類を許す」設計(ソフトマージン)が用いられます。ここで登場するのが正則化パラメータCで、マージンの広さと誤分類の許容度のバランスを調整します。

Cを大きくする誤分類を許しにくくなる(学習データに合わせやすいが、過学習のリスクが増える場合がある)
Cを小さくする誤分類を許しやすくなる(境界が滑らかになりやすいが、当てはまりが弱くなる場合がある)

カーネルによる非線形分離

現実のデータは、直線(平面)でうまく分けられないことが少なくありません。その場合に使われる代表的な仕組みが、カーネル(kernel)です。

カーネルSVMは、元の空間では非線形に見える境界を、高次元の空間で「線形に」分けるという考え方を利用します。ポイントは「高次元への写像を、明示的に計算しない」ことです。カーネル関数を使うことで、写像後の内積を直接計算でき、計算量や実装の負担を抑えられます(これがいわゆるカーネルトリックです)。

代表的なカーネルには次のようなものがあります。

  • 線形カーネル(線形SVM):特徴量の次元が高いテキスト分類などで有力な選択肢
  • RBF(ガウシアン)カーネル:非線形境界に強く、汎用性が高い
  • 多項式カーネル:曲線的な境界を表現できるが、調整が難しい場合がある

カーネルを使うと表現力は上がりますが、その分ハイパーパラメータの調整が重要になります。とくにRBFカーネルではγ(ガンマ)が境界の細かさに関わります。

γを大きくする境界が細かくなりやすい(学習データに過度に適合するリスクが増える場合がある)
γを小さくする境界がなだらかになりやすい(表現力が不足する場合がある)

SVMが活躍しやすい領域と利点

SVMが適している問題

SVMは、次のような条件で検討対象になりやすいアルゴリズムです。

  • 特徴量が整理できていて、データ量が極端に巨大ではない
  • 分類境界をある程度はっきり作りたい(誤差の許容度を制御したい)
  • 線形で足りるか、カーネルで非線形が必要かを試し分けられる

業務でよく挙がる用途としては、画像分類、文書分類、異常検知(One-Class SVMなど)、バイオインフォマティクス、信用リスク評価などがあります。ただし、画像のように特徴量設計が難しい領域では、近年は深層学習が強い選択肢になることも多く、SVMは「特徴量が整った状態で強みが出る」点を押さえると判断しやすくなります。

分類問題での有効性

SVMが分類で評価されやすい理由は、マージン最大化の設計により、境界の“余裕”を確保して未知データへの耐性を持たせやすい点にあります。ただし、これは自動的に保証されるものではなく、Cやカーネル・パラメータの設定が不適切だと過学習・過小適合の両方が起こり得ます。

また、SVMは入力特徴量のスケールに敏感です。特徴量の単位がバラバラだと、距離や内積の計算が特定の特徴量に支配され、境界が不安定になることがあります。そのため、実運用ではスケーリング(標準化など)を前提として設計します。

回帰への拡張(SVR)

SVMの考え方を回帰に拡張したSVRでは、連続値を予測します。SVRでは「どれくらいの誤差を許すか」を制御する考え方(ε不感帯)を取り入れ、ノイズに強い推定を狙うことがあります。用途としては需要予測や品質予測などが挙げられますが、データ量や説明可能性の要件次第では、線形回帰・勾配ブースティング・ニューラルネットなど他手法が適する場合もあります。

SVMの汎化性能を支える考え方

SVMの背景には、過学習を抑えた学習を目指す理論(構造リスク最小化など)があります。実務上は次の理解で十分です。

  • 境界を「過度に複雑にしない」方向へ誘導しやすい
  • ただし、Cやγの設定で複雑さは大きく変わる
  • 汎化性能は、最終的には検証データで評価して決める

「SVMだから必ず汎化する」とは言い切れません。検証設計(ホールドアウト、交差検証)とパラメータ探索が、結果の品質を左右します。

SVMの実装とチューニングの要点

実装の基本手順

SVMの実装は、多くの場合次の順序で進めます。

  1. 目的(分類か回帰か、誤分類コストの重みづけが必要か)を明確化する
  2. 特徴量を整備し、学習・評価データに分割する
  3. 前処理(欠損・外れ値・カテゴリ変数の変換・スケーリング)を設計する
  4. モデル(線形 / カーネル)を選び、ハイパーパラメータを探索する
  5. 評価指標(精度、再現率、F1、AUCなど)で比較し、運用要件に合うものを採用する

「精度が高い」だけでなく、誤分類の影響(例えば不正検知での見逃しコスト)や、推論速度、再学習頻度も考慮して決めると、運用での手戻りが減ります。

主要ハイパーパラメータと調整の考え方

SVMの調整で頻出のパラメータは次のとおりです。

  • C:誤分類の許容度(正則化の強さに相当)
  • γ:RBFカーネルの影響範囲(境界の細かさに関わる)
  • カーネル種別:線形 / RBF / 多項式 など
  • class_weight(分類):クラス不均衡に対する重みづけ

探索の基本は、交差検証と組み合わせたグリッドサーチやランダムサーチです。探索範囲を広げすぎると計算が重くなるため、まずは粗く探索し、見込みのある範囲を絞ってから細かく詰める、という段階的な進め方が現実的です。

前処理とスケーリングが重要な理由

SVMは距離や内積にもとづいて境界を決めるため、特徴量のスケール差が大きいと学習が歪みやすいという性質があります。例えば「年収(数百万円)」と「クリック数(数十)」のように桁が違う特徴量をそのまま入れると、年収が支配的になる可能性があります。

一般に、次のような処理を検討します。

  • 標準化(平均0、分散1)や正規化(0〜1)などのスケーリング
  • 欠損値補完(平均・中央値・モデルベースなど)
  • カテゴリ変数のエンコーディング(One-Hotなど)

運用面では、学習時に使った前処理を推論時にも同じ手順で適用する必要があります。前処理を含めてパイプライン化する設計は、再現性と事故防止に直結します。

代表的ライブラリと実務での選び方

SVMは多くのライブラリで実装されています。代表例は次のとおりです。

  • scikit-learn(Python):実務で最も利用されやすい選択肢の一つ
  • LIBSVM:古典的だが広く使われた実装(派生実装も多い)

深層学習フレームワークでもSVMを組み込むことはできますが、一般にはSVM単体なら専用実装のほうが扱いやすいことが多いでしょう。実務では「周辺機能(前処理・評価・モデル管理)」まで含めて使い勝手を見て選ぶのが安全です。

SVMの課題と運用上の注意

計算コストと大規模データ

SVMは、データ数が増えるほど学習が重くなる傾向があります。とくにカーネルSVMは計算・メモリの負担が大きくなりやすく、大規模データでは現実的でない場合があります。大規模データで分類をしたい場合は、線形SVM(近似・確率的最適化を含む)や、別アルゴリズム(勾配ブースティングなど)を検討することが多いです。

また推論時も、サポートベクトルが多いと計算が重くなります。リアルタイム性が重要なら、推論レイテンシーも含めて評価しましょう。

カーネル選択の難しさ

カーネルは表現力を上げる一方で、適切な選択とパラメータ調整が難しい要素です。迷った場合は、まず線形SVMやRBFから試し、検証指標と運用制約(速度・説明可能性)で比較する進め方が堅実です。

マルチクラス分類の扱い

SVMはもともと2値分類が基本ですが、One-vs-Rest(OvR)やOne-vs-One(OvO)などで多クラスに拡張できます。クラス数が増えると計算量やモデル管理が増えるため、クラス数・データ量・推論要件のバランスで手法を選びます。

確率出力と説明可能性

SVMの出力は基本的に「境界からの距離(スコア)」で、確率そのものではありません。確率が必要な業務(しきい値設計、意思決定の説明など)では、確率キャリブレーション(Platt scalingなど)や、確率を自然に出せる別モデルを検討することがあります。

また、線形SVMは係数から特徴量の影響を読みやすい一方、カーネルSVMは直感的な説明が難しくなる傾向があります。説明可能性が重要な場合は、モデル選定の時点で要件として組み込みましょう。

まとめ

SVMは、分類・回帰に使える代表的な教師あり学習アルゴリズムで、マージン最大化という発想により汎化性能を狙いやすい点が特徴です。線形SVMは比較的扱いやすく、カーネルSVMは非線形な境界にも対応できます。一方で、スケーリングなどの前処理、Cやγの調整、計算コスト、説明可能性といった実務上の注意点も多く、検証設計と運用要件を踏まえた選定が欠かせません。SVMの強みと制約を理解したうえで、問題に合う形で導入・チューニングすることが、安定した成果につながります。

Q.SVMは何に使われるアルゴリズムですか?

主に分類に使われ、拡張として回帰(SVR)にも利用されます。

Q.SVMの「マージン最大化」とは何ですか?

分類境界とデータ点の距離をできるだけ広く取り、誤分類に強い境界を学習する考え方です。

Q.サポートベクトルとは何ですか?

分類境界に最も近く、境界の位置を決めるのに効くデータ点です。

Q.線形SVMとカーネルSVMの違いは何ですか?

線形SVMは直線的な境界を学習し、カーネルSVMは非線形な境界も表現できます。

Q.RBFカーネルのγは何を調整しますか?

境界の細かさを調整し、値が大きいほど複雑になりやすいです。

Q.正則化パラメータCは何を意味しますか?

誤分類をどれだけ許すかの度合いで、マージンと学習誤差のバランスを調整します。

Q.SVMでスケーリングが重要なのはなぜですか?

距離や内積にもとづいて境界が決まるため、特徴量の桁差が大きいと学習が歪みます。

Q.SVMは大規模データに向きますか?

カーネルSVMは学習が重くなりやすく、大規模では線形SVMや他手法の検討が現実的です。

Q.SVMは確率を出力できますか?

基本はスコア出力で、確率が必要なら確率キャリブレーションなどを併用します。

Q.SVMの実装でよく使われるライブラリは何ですか?

Pythonならscikit-learnが定番で、LIBSVM系の実装も広く使われています。

記事を書いた人

ソリトンシステムズ・マーケティングチーム