線形SVMシミュレーター 戻る
機械学習シミュレーター

線形SVMシミュレーター — ソフトマージン2D分類

劣勾配降下法でヒンジ損失と L2 正則化を最小化し、最大マージン分離直線を学習。サポートベクターと、正則化係数 C やノイズが決定境界に与える影響を直感的に学べる機械学習可視化ツールです。

パラメータ設定
正則化パラメータ C
学習率 η
反復回数
データのノイズ加算
σ

データセットは固定seed=42のLCGで生成(決定論的)。クラス +1 は中心(2,2)、-1 は中心(-2,-2)、各20点・σ=1.0。

計算結果
訓練精度
マージン幅 2/‖w‖
サポートベクター数(マージン内/上)
‖w‖_2
2D分類と最大マージン分離面

青丸=クラス+1 / 赤×=クラス-1 / 緑実線=分離直線 w·x+b=0 / 緑破線=マージン境界 w·x+b=±1 / 黒丸=サポートベクター

理論・主要公式

ソフトマージン線形SVMは、ヒンジ損失とL2正則化の和を最小化することで、最大マージン分離超平面を学習します。

決定関数。w は重みベクトル、b はバイアス:

$$f(\mathbf{x}) = \mathbf{w}\cdot\mathbf{x} + b$$

目的関数。第1項はマージン最大化、第2項はヒンジ損失。Cは正則化パラメータ:

$$J(\mathbf{w},b) = \tfrac{1}{2}\|\mathbf{w}\|^2 + C\sum_{i=1}^{N}\max\bigl(0,\,1 - y_i\,f(\mathbf{x}_i)\bigr)$$

劣勾配(マージン違反の点 $1-y_i f(\mathbf{x}_i)>0$ のみが寄与):

$$\frac{\partial J}{\partial \mathbf{w}} = \mathbf{w} - C\sum_{i\in\mathcal{V}} y_i\,\mathbf{x}_i,\quad \frac{\partial J}{\partial b} = -C\sum_{i\in\mathcal{V}} y_i$$

マージン幅は $2/\|\mathbf{w}\|$。サポートベクターは $|y_i f(\mathbf{x}_i) - 1|$ が小さい点(マージン境界上または内側)。

線形SVMシミュレーターとは

🙋
SVMって名前は聞いたことあるんですけど、要するに何をしているんですか?
🎓
ざっくり言うと、2クラスのデータを「できるだけ余裕を持って」分ける直線(多次元なら超平面)を引くアルゴリズムだよ。上のシミュレーターでは、青丸と赤×を分ける緑の直線を学習している。重要なのは、ただ分けるだけじゃなくて、両側の最も近い点までの距離(マージン)が最大になる直線を選ぶこと。これが「最大マージン分類器」と呼ばれる所以だ。
🙋
緑の破線が2本ありますね。これは何ですか?
🎓
それがマージン境界。$w\cdot x + b = \pm 1$ の線で、この帯の幅 $2/\|w\|$ がマージン幅だ。SVMは、この帯をできるだけ広げつつ、訓練点を正しく分類しようとする。スライダーの「正則化パラメータC」を1から100に上げてみて。Cが大きいほど誤分類への罰が重くなり、マージン帯は狭くなって個々の点に厳しくフィットするようになるよ。
🙋
「サポートベクター」のカードに数字が出てますね。黒丸で囲まれた点ですか?
🎓
そう。マージン境界の上、または内側に入っている点がサポートベクター。実はSVMの面白いところは、最終的な決定境界がこのサポートベクターだけで決まることなんだ。マージンの外側にある「分類が楽な点」は、いくら追加しても境界は変わらない。だから「サポートベクター=決定の支柱」というネーミングなんだよ。
🙋
「ノイズ加算」のスライダーを動かすと、青と赤が混ざりはじめて、マージン幅が広がりますね。直感と逆な気がします。
🎓
いい観察だ。データの重なりが大きくなると、もうマージン境界の中に多くの点が入ってしまう。ソフトマージンSVMはヒンジ損失でこれを「許容」しつつ、Cで罰の重さを決める。Cが小さいと「マージンを広く取って多少の違反は許す」、Cが大きいと「違反は極力許さず、マージンを狭めてでも正しく分けようとする」。実務では交差検証でCを決めるのが定番だよ。

よくある質問

劣勾配降下法の1ステップで進む量が大きくなります。小さすぎると収束が遅く、大きすぎるとwとbが振動して発散します。本ツールでは0.01程度が安定値です。0.5まで上げると、特にCが大きいときに目的関数が大きく振動し、訓練精度が一時的に下がることがあります。実装の安定性を体感する練習になります。
主な原因は3つです。1つ目はノイズが大きく、データが線形分離不能になっている場合。2つ目はCが小さすぎて、誤分類への罰が軽く、ある程度の誤分類を「許容」している場合。3つ目は反復回数が少なすぎて、まだ収束していない場合です。ノイズ0、C=1、η=0.01、反復500なら本ツールの初期データでは100%が出ます。
3つの選択肢があります。1つは特徴量を増やして線形に分離可能な空間に持ち込むこと(例:x1²やx1·x2などの多項式特徴量を追加)。2つ目はカーネルSVMを使うこと(RBF・多項式・シグモイドなど)。3つ目はソフトマージンを許容し、ある程度の誤分類を受け入れて頑健性を優先すること。実データでは2番目と3番目の組み合わせが多いです。
どちらも線形分類器ですが、損失関数が異なります。SVMはヒンジ損失で、マージン外の正しく分類された点には損失をゼロにします。ロジスティック回帰はクロスエントロピー損失で、全ての点に対して常に勾配が発生します。結果として、SVMはサポートベクターのみで決まる「疎な解」、ロジスティック回帰は確率出力を伴う滑らかな解になります。確率が必要ならロジスティック回帰、マージン重視ならSVMが選ばれることが多いです。

実世界での応用

テキスト分類とスパムフィルタ:SVMは2000年代の標準的なテキスト分類器でした。文書を単語の出現頻度ベクトル(TF-IDF)で表現し、線形SVMでスパム判定やトピック分類を行います。高次元・疎なベクトルに強いSVMの特性が、語彙が数万次元になるテキストデータに非常に適合します。現在もシンプルなテキスト分類のベースラインとして広く使われます。

画像分類とバイオインフォマティクス:HOG特徴量+線形SVMによる人検出(Dalal & Triggs, 2005)は、深層学習以前の画像認識のデファクト手法でした。バイオインフォマティクスでは、遺伝子発現データやタンパク質構造の分類にカーネルSVMが活用されます。サンプル数が少なく特徴量が多い「小さいn、大きなp」問題に強いのがSVMの特長です。

異常検知(One-Class SVM):正常データだけから「正常領域」の境界を学習し、外れた点を異常とする One-Class SVM は、製造ライン上での欠陥検知やセンサー異常検知、ネットワーク侵入検知などで使われます。クラス不均衡が極端な状況に強く、ラベル付きの異常サンプルを必要としない点が実用上のメリットです。

機械学習の教育・基礎理論:SVMはマージン最大化、双対化、カーネル法、凸最適化、構造リスク最小化など、現代機械学習の主要概念がすべて詰まった教材です。深層学習が主流になった現在でも、機械学習を体系的に学ぶ上での重要な「型」として、大学や実務研修で必修扱いされることが多いアルゴリズムです。

よくある誤解と注意点

最も多い誤解は、「Cを大きくすればするほど性能が上がる」と考えてしまうことです。Cはヒンジ損失の重みで、大きくすると訓練データへのフィットが強くなりますが、過学習のリスクも上がります。逆にCを小さくするとマージンが広くなり、汎化性能は上がる一方で訓練精度は落ちます。シミュレーターでCを0.01から100まで動かしてみると、マージン幅が連続的に変わるのが見えます。実務では交差検証でCをグリッドサーチするのが鉄則です。最適なCはデータによって全く異なります。

次に多いのが、「劣勾配降下法はSVMの正規の解法」と思い込むことです。本ツールは教育目的で実装の単純さを優先しましたが、実務のSVMは双対問題をSMO(Sequential Minimal Optimization)で解くのが標準です(LIBSVM、scikit-learn、Vowpal Wabbitなど)。劣勾配法は大規模オンライン学習(Pegasos)で使われますが、収束速度や数値安定性で双対法に劣ります。本ツールはあくまで「ヒンジ損失とマージン最大化の関係」を体感するための装置です。

最後に、「SVMはスケールに無関心」だと誤解する点に注意してください。実は線形SVMは特徴量のスケールに非常に敏感です。x1が0〜1、x2が0〜10000のようなデータをそのまま入れると、x2のスケールが大きすぎて w2 が極端に小さくなり、x1の寄与がほぼ無視されます。本ツールは2次元で同じスケールのデータを使っているので問題は出ませんが、実データでは必ず標準化(StandardScaler)や正規化を行うのが鉄則です。これを忘れると、Cの調整が無意味になることが多いです。