---
title: Python ではじめる機械学習 7. サポートベクトルマシン
tags:  #機械学習  
author: [荒木 雅弘](https://www.docswell.com/user/MasahiroAraki)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GJ51LYGQ74.jpg?width=480
description: Python ではじめる機械学習 7. サポートベクトルマシン by 荒木 雅弘
published: November 22, 25
canonical: https://www.docswell.com/s/MasahiroAraki/ZX6JPM-2025-11-22-120206
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GJ51LYGQ74.jpg)

7. サポートベクトルマシン
線形分離できる
可能性が⾼い !!
(a) 2次元上では線形分離不可能なデータ
(b) ⾼次元へ写像されたデータ
7.1 サポートベクトルマシンとは
7.2 ソフトマージンによる誤識別データの吸収
7.3 カーネル関数を用いたSVM
7.4 SVMの応用
7.5 ハイパーパラメータの調整
荒木雅弘 : 『Pythonではじめる機械学
習』
（森北出版，2025年）
スライドとコード


# Page. 2

![Page Image](https://bcdn.docswell.com/page/LE31L5RZ75.jpg)

7. サポートベクトルマシン
本章の説明手順
1. 線形分離可能なデータに対して，なるべく学習データに特化しすぎない識別面を求める
2. 線形分離不可能なデータに対して，誤識別に対するペナルティを設定することで，1. の
手法を改良する
3. さらに複雑なデータに対して，学習データを高次元の空間に写して，2. の手法を適用す
る
4. 応用例の紹介
5. 3.の手法に対して，最適なハイパーパラメータを求める


# Page. 3

![Page Image](https://bcdn.docswell.com/page/8EDXNDY4JG.jpg)

7.1 サポートベクトルマシンとは (1/6)
汎化性能を高めるために，マージンを最大化する識別面を求める
マージン : 識別面と最も近いデータとの距離
学習データは線形分離可能とする
サポート
ベクトル
(a) マージンの⼩さい識別⾯
マージン
(b) マージンの⼤きい識別⾯


# Page. 4

![Page Image](https://bcdn.docswell.com/page/V7PP5X6V78.jpg)

7.1 サポートベクトルマシンとは (2/6)
マージン最大化のための定式化
学習データ: x ∈ Rd ,
y ∈ {−1, 1}
{(xi , yi )} (i = 1, … , N )
​
​
識別面の式（超平面）
w T x + w0 = 0
識別面の式に制約を導入（係数を定数倍しても超平面は不変）
min ∣wT xi + w0 ∣ = 1
​
i
​
​


# Page. 5

![Page Image](https://bcdn.docswell.com/page/2JV2PL3RJQ.jpg)

7.1 サポートベクトルマシンとは (3/6)
学習対象の設定
学習データと識別面との最小距離（マージン）
cf) 点と直線の距離の公式
∣wT xi + w0 ∣
1
min Dist(xi ) = min
=
i
i
∥w∥
∥w∥
​
​
​
​
​
目的関数：マージン最大化を，逆数の2乗の最小化と置き換える
1
min ∥w∥2
2
​
制約条件 : w で定まる超平面で正しく識別が行えること
yi (wT xi + w0 ) ≥ 1,
​
​
​
(i = 1, … , N )
​


# Page. 6

![Page Image](https://bcdn.docswell.com/page/5EGRPX36JL.jpg)

7.1 サポートベクトルマシンとは (4/6)
最適化問題の解法 : ラグランジュの未定乗数法
例題（2変数，等式制約）
min f (x, y) s.t. g(x, y) = 0
ラグランジュ関数の導入 : L(x, y, α) = f (x, y) + αg(x, y)
ラグランジュ係数の制約 : α ≥ 0
L を x, y, α で偏微分して 0 になる値が f の極値
変数3つに対して制約式が3つなので，変数について解ける
∂L
∂L
∂L
=
=
=0
∂x
∂y
∂α
​
​
​


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4JQV28527P.jpg)

7.1 サポートベクトルマシンとは (5/6)
より解きやすい問題への変換
N
1
L(w, w0 , α) = ∥w∥2 − ∑ αi (yi (wT xi + w0 ) − 1)
2
i=1
​
​
​
N
​
​
​
​
​
N
∂L
= 0 ⇒ ∑ αi yi = 0,
∂w0
i=1
​
​
∂L
= 0 ⇒ w = ∑ α i y i xi
∂w
i=1
​
​
​
​
N
​
​
N
1
L(α) = − ∑ αi αj yi yj xTi xj + ∑ αi
2 i,j=1
i=1
​
​
​
​
​
​
​
​
​
​
最後の式の最小化は αi ≥ 0 での2次計画問題なので，容易に極値となる α を求めるこ
​
とができ，そこから w が求まる


# Page. 8

![Page Image](https://bcdn.docswell.com/page/K74ML29PJ1.jpg)

7.1 サポートベクトルマシンとは (6/6)
定数項の計算
各クラスのサポートベクトルを引数とした識別関数の値の絶対値が 1 であることから
1
wT x+ + w0 = −(wT x− + w0 ) ⇔ w0 = − (wT x+ + wT x− )
2
​
​
​
​
​
​
​
​
マージンが最大の識別関数
N
g(x) = wT x + w0 = ∑ αi yi xT xi + w0
​
​
​
​
​
i=1
サポートベクトル xi に対応する αi のみが 0 以上，残りは 0
​
​
マージン最大の識別面の決定にはサポートベクトルしか関与しない
​


# Page. 9

![Page Image](https://bcdn.docswell.com/page/LJ18LMKXEG.jpg)

7.2 ソフトマージンによる誤識別データの吸収 (1/3)
少量のデータが線形分離性を妨げている場合
誤差を考える


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GJWZV3DKJ2.jpg)

7.2 ソフトマージンによる誤識別データの吸収 (2/3)
スラック変数 ξi の導入
​
y i ( w T x i + w 0 ) ≥ 1 − ξi ,
​
​
​
​
(i = 1, … , N , ξi ≥ 0)
​
ξi = 0 : マージンの外側，0 &lt; ξi ≤ 1 : マージンと識別面の間，1 &lt; ξi : 誤り
​
​
​
最小化問題の修正: スラック変数も小さい方がよい
N
1
min ( ∥w∥2 + C ∑ ξi )
2
​
​
i=1
計算結果
αi の2次計画問題に 0 ≤ αi ≤ C が加わるだけ
​
​
​


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4EZ14VGN73.jpg)

7.2 ソフトマージンによる誤識別データの吸収 (3/3)
C : エラー事例に対するペナルティの大きさ
大きな値 ： 誤識別データの影響が大きい
マージンが狭くても誤識別をなるべく減らすようにする
小さな値 ： 誤識別データの影響が小さい
多少の誤識別があっても，なるべくマージンを広くする


# Page. 12

![Page Image](https://bcdn.docswell.com/page/Y76L35Y9JV.jpg)

7.3 カーネル関数を用いたSVM (1/5)
クラスが複雑に入り交じった学習データ
特徴ベクトルを高次元空間に写像して線形分離可能性を高める
ただし，もとの空間でのデータ間の近接関係は保持するように写像する
線形分離できる
可能性が⾼い !!
(a) 2次元上では線形分離不可能なデータ
(b) ⾼次元へ写像されたデータ


# Page. 13

![Page Image](https://bcdn.docswell.com/page/G751LYGDE4.jpg)

7.3 カーネル関数を用いたSVM (2/5)
高次元への非線形変換関数 ϕ(x) を設定する
カーネル関数 : 2つの点の近さを表す
k(x, x′ ) = ϕ(x)T ϕ(x′ )
もとの空間での2つの点の近さを，変換後の空間での2つのベクトルの内積に対応させる
x と x′ が近ければ k(x, x′ ) は大きい値
カーネル関数が正定値性を満たすとき，このような非線形変換が存在することが保証さ
れている


# Page. 14

![Page Image](https://bcdn.docswell.com/page/9J21LGDM7R.jpg)

7.3 カーネル関数を用いたSVM (3/5)
正定値カーネル関数の例（scikit-learn SVCの定義）
線形(linear) : k(x, x′ ) = xT x′
高次元に写像せず，もとの特徴空間でマージン最大の超平面を求めるときのカーネル関数
多項式(poly) : k(x, x′ ) = (xT x′ + r)d
d 項の相関を加えるので d が大きいほど複雑な識別面．r はたいてい 1
ガウシアン(rbf) : k(x, x′ ) = exp(−γ∥x − x′ ∥2 )
γ が大きいほど近くのデータしか影響しないので複雑な識別面


# Page. 15

![Page Image](https://bcdn.docswell.com/page/DEYZQV2P7M.jpg)

7.3 カーネル関数を用いたSVM (4/5)
変換後の線形識別関数：g(x) = w T ϕ(x) + w0
​
N
SVMで求めた w の値を代入: w = ∑i=1 αi yi ϕ(xi )
​
​
​
N
​
N
g(x) = ∑ αi yi ϕ(x)T ϕ(xi ) + w0 = ∑ αi yi K (x, xi ) + w0
​
i=1
​
​
​
​
​
​
​
​
​
i=1
カーネルトリック : 非線形変換の式は不要で，カーネル関数を用いて元の空間の情報の
みで識別関数が書ける
変換後の空間での線形識別面は，もとの空間での複雑な非線形識別面に対応


# Page. 16

![Page Image](https://bcdn.docswell.com/page/VJN3KM8MJ8.jpg)

7.3 カーネル関数を用いたSVM (5/5)
sklearn で識別を行う SVM の定義
SVC(C=1.0, kernel=&#039;rbf&#039;, degree=3, gamma=&#039;scale&#039;, coef0=0.0, shrinking=True,
probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False,
max_iter=-1, decision_function_shape=&#039;ovr&#039;, break_ties=False, random_state=None)
ハイパーパラメータ
C : スラック変数の重み
kernel : カーネルの種類
&#039;poly&#039; : 多項式カーネル
&#039;rbf&#039; : RBFカーネル
その他 : &#039;linear&#039;, &#039;sigmoid&#039;, &#039;precomputed&#039;
degree : polyカーネルを指定したときの次数
gamma : （主として）RBFカーネルを指定したときの係数


# Page. 17

![Page Image](https://bcdn.docswell.com/page/YE99VNKWE3.jpg)

7.4 SVMの応用 (1/2)
One-class SVMによる新規検知
RBFカーネルによる写像後の学習データを正例，原点を負例とみなして境界を得る
新規データに対して，境界の外の場合は異常とみなす


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GE89PKRR7D.jpg)

7.4 SVMの応用 (2/2)
サポートベクトル回帰
回帰における基底関数としてカーネル関数を用いる
例) RBFカーネルを用いた場合
N
N
c^(x) = ∑ αj K (x, xj ) = ∑ αj exp(−γ∥x − xj ∥2 )
​
​
j=1
1次元特徴の場合
​
​
​
​
j=1
2次元特徴の場合


# Page. 19

![Page Image](https://bcdn.docswell.com/page/LELW1ZK2JR.jpg)

7.5 ハイパーパラメータの調整 (1/2)
パラメータ : 学習データを用いて調整
線形識別関数の重み w
SVMの α
ニューラルネットワークの結合の重み
ハイパーパラメータ : 学習前に決めておくもの
高次識別関数の次数 b，正則化項の重み α
SVM におけるスラック変数の重み C , 多項式カーネルの次数 d
ニューラルネットワークの中間ユニット数，層数


# Page. 20

![Page Image](https://bcdn.docswell.com/page/4JM9WV29EW.jpg)

7.5 ハイパーパラメータの調整 (2/2)
ハイパーパラメータが複数ある場合
グリッドサーチ：各格子点で性能を予測する
格子点の最小値・最大値・間隔等の知見が必要
ハイパーパラメータが連続値の場合は等比数列で設定する
ランダムサーチ：各ハイパーパラメータの適切な範囲内で乱数によって複数点を設定
性能に大きく寄与するハイパーパラメータが存在する場合に有効
ベイズ最適化
ハイパーパラメータの値を入力，性能を出力とした回帰問題を設定し，ガウス過程回帰を用い
て性能が高くなりそうなハイパーパラメータを探索


# Page. 21

![Page Image](https://bcdn.docswell.com/page/PJRGY2M9E9.jpg)

まとめ
SVMは線形分離可能なデータに対して，マージン最大の識別面を求める手法
誤識別に対するペナルティをスラック変数として設定することで，線形分離不可
能なデータへも適用可能
学習データを高次元の空間に写像するカーネル法では，カーネルトリックによっ
て元の空間での情報のみで識別関数を表現できる
SVMのような多数のハイパーパラメータを持つモデルではハイパーパラメータチ
ューニングを行う


