サポートベクターマシン(SVM)完全ガイド:原理・カーネル・実装とハイパーパラメータ最適化の実務ノウハウ
はじめに
サポートベクターマシン(Support Vector Machine;SVM)は、1990年代にVapnikらの理論を基礎に発展した教師あり学習アルゴリズムで、分類や回帰(SVR)に広く使われています。直感的には「クラス間の余裕(マージン)を最大にする超平面を見つける」方法で、カーネルトリックにより非線形な問題にも強力に適用できます。本コラムではSVMの基本原理、数学的定式化、カーネル、実装上の注意点、長所・短所、典型的な応用例までを深掘りします。
基本原理:最大マージン分類器
SVMの中心的な考え方は、二値分類において入力空間における2クラスを分ける境界(超平面)を求める際、単に誤分類を減らすだけでなく、クラス間の「余裕(マージン)」を最大化することです。線形分離可能な場合、目的は次の線形超平面 w·x + b = 0 を求め、クラスごとの最近接点(サポートベクター)からの距離を最大化することになります。マージンを最大化することで、汎化性能が向上すると期待されます。
数学的定式化(概念的説明)
- 線形SVM(分離可能):マージンを 2/||w|| と表現できるので、||w|| を最小化する制約付き最適化問題を解きます。制約は各サンプルが正しく分類されること(y_i (w·x_i + b) ≥ 1)。
- ソフトマージン(非分離可能):現実データはノイズや重なりがあり完全に分離できないため、スラック変数 ξ_i を導入して誤分類を許容します。目的は ||w||^2 を小さくしつつスラックの総和を罰することで、トレードオフを制御するハイパーパラメータ C を使います。
- 双対問題とサポートベクター:プライマル問題を双対に変換すると、解はラグランジュ乗数 α_i によって表され、ほとんどの α_i はゼロになります(=サポートベクターのみが境界を決定)。双対形式はカーネルを導入しやすい形です。
- 損失関数:線形SVMはヒンジ損失(max(0, 1 - y f(x) ))を最小化する観点でも理解できます。これは分類マージンの観点から導かれます。
カーネルとカーネルトリック
線形で分離できない問題には、入力を高次元特徴空間に写像することで線形分離可能にする手法が考えられます。カーネルトリックはこの写像を明示的に行わず、内積 K(x_i, x_j) を計算することで高次元での処理を効率的に行えます。代表的なカーネルには次があります:
- 線形カーネル:K(x,x') = x·x'(高次元化なし、疎な高次元データや大規模線形問題に有効)
- 多項式カーネル:(γ x·x' + r)^d(次数d、スケーリングγ、オフセットr)
- RBF(ガウス)カーネル:exp(-γ ||x-x'||^2)(局所性を持ち、高い表現力)
- シグモイドカーネル:tanh(γ x·x' + r)(ニューラルネット的だが注意が必要)
カーネルはMercerの条件を満たす必要があり、これにより対応する写像が再生核ヒルベルト空間(RKHS)を形成します。
学習アルゴリズムと計算量
SVMの学習は凸な二次計画問題(QP)を解く問題であり、理論的には一意の最適解が存在します。ただしカーネル行列(グラム行列)の計算は O(n^2) のメモリと O(n^3) の計算量を要求するため、大規模データにそのまま適用するのは現実的ではありません。実運用では以下の工夫が使われます:
- SMO(Sequential Minimal Optimization):John Plattによるペアごとに最適化する手法で、メモリと計算を大幅に削減します。
- LIBSVMやliblinearなど効率実装:ヒューリスティックやデータ分割、線形SVM専用のアルゴリズムで高速化。
- 近似カーネル法やランダム特徴(random Fourier features)で近似的に線形化してスケールさせる手法。
ハイパーパラメータとチューニングの実務的注意点
- C(ソフトマージンパラメータ):大きいと誤分類を厳しく罰し過学習を招く可能性、小さいと過剰な正則化でアンダーフィッティングになる。
- γ(RBFなどのカーネル):大きいと局所的なフィッティングになりやすく過学習、低いと平滑化しすぎる。
- 特徴量スケーリング:SVMは距離や内積に依存するため、標準化(平均0・分散1)や正規化は必須に近い。
- クロスバリデーション:Cとカーネルパラメータはグリッドサーチ+クロスバリデーションで選ぶのが標準。
- マルチクラス処理:SVM自体は二値分類器なので、One-vs-Rest(OvR)やOne-vs-One(OvO)で拡張するのが一般的。ライブラリによっては内部で自動処理します。
確率出力と回帰(SVR)
SVMは本来確率的な出力をしないが、Plattスケーリングなどでシグモイド関数を当てはめることで確率推定が可能です。回帰問題にはSVR(Support Vector Regression)があり、ε-不感帯(epsilon-insensitive loss)を使って誤差を許容することで回帰モデルを構築します。
長所・短所(実務視点)
- 長所
- 高次元データ(特徴数が多い)に強い。テキスト分類などでよく効く。
- マージン最大化により汎化性能が高い傾向。
- サポートベクターだけで表現されるため解が疎である(モデルが比較的コンパクト)。
- カーネルにより非線形問題へ柔軟に適用可能。
- 短所
- 大規模データセットでは計算量・メモリがボトルネックになりやすい。
- カーネル選択やハイパーパラメータの調整が精度に大きく影響する。
- 出力が確率ではない(追加処理が必要)。
- 特徴量のスケーリングやカテゴリ変数の前処理が重要で、扱いがやや煩雑。
実用的なコツ
- まずは線形カーネルを試す:特徴空間が高次元なら線形で十分なことが多く、計算も速い。
- SVMは外れ値に敏感なのでデータの前処理(外れ値除去や正規化)を行う。
- クロスバリデーションでCとカーネルパラメータを網羅的に調べる(対数スケールのグリッドが一般的)。
- 大規模データには線形SVM(liblinear)や近似カーネル手法、確率的勾配法を検討する。
- 確率出力が必要ならPlattスケーリングやベイズ的キャリブレーションを行う。
主な応用例
- テキスト分類(スパム検出、カテゴリ分類)— 高次元疎データとの相性が良い。
- 画像認識(顔認識や物体分類)— 特徴抽出と組み合わせて使用。
- バイオインフォマティクス(タンパク質分類、遺伝子発現データ)— 高次元低サンプル数の領域で有効。
- 回帰問題(SVR)や異常検知にも応用可能。
まとめ
SVMは理論的に洗練され、実務でも多くの領域で有効に機能する強力な分類器です。カーネルトリックやソフトマージンを通じて非線形・ノイズ混入データにも適用でき、線形・非線形双方での選択肢があります。一方で大規模データやハイパーパラメータ調整、特徴量前処理に注意が必要です。実運用ではまず線形を試し、必要に応じてRBFなどを導入、クロスバリデーションでパラメータを最適化するのが現実的なアプローチです。
参考文献
- Cortes, C., & Vapnik, V. (1995). Support-vector networks. Machine Learning.
- Chang, C.-C. and Lin, C.-J. LIBSVM: a library for support vector machines.
- scikit-learn: Support Vector Machines — 実装とチュートリアル(英語)
- Platt, J. (1998). Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines.
- Hinge loss / SVM 解説資料(教育用)
- Wikipedia: Support-vector machine(総合的な概説)


