---
title: パターン認識論 #9
tags:  #機械学習 #深層学習 #パターン認識  
author: [Akinori Ito](https://image.docswell.com/user/akinori-ito)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/3JK958LLJD.jpg?width=480
description: 東北大学で2023年に開講していた「パターン認識論」のスライドです SVMはマージンを最大化する超平面を探索し、ヒンジ損失を用いて誤分類を抑えます。カーネルトリックによりデータを高次元空間へ写像し、線形では分離できない問題も多項式カーネルやRBFカーネルで解決できます。重みベクトルはサポートベクトルの線形結合で表され、最適化は二次計画問題として解かれます。実装例として、Pythonのscikit-learn、Rのe1071やkernlab、WEKAの各分類器を用い、WineデータセットでSVMと決定木の性能比較を行います。
published: April 16, 26
canonical: https://image.docswell.com/s/akinori-ito/53JG1D-2026-04-16-090125
---
# Page. 1

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

パターン認識論
第9回
伊藤 彰則


# Page. 2

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

サポートベクターマシン
◦Support Vector Machine (SVM)
◦ 線形識別の仲間（非線形もできる）
◦ 未知データに強い識別境界を探す
（マージン最大化）
◦ 高次元非線形特徴空間への暗黙の写像
（カーネルトリック）


# Page. 3

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

線形識別
◦超平面でクラスを分ける


# Page. 4

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

線形識別
◦様々な識別境界：どれが良い？
できるだけ「ぎりぎりでない方」が良さそう


# Page. 5

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

マージン最大化
◦識別境界に一番近い学習サンプル
（サポートベクター）と識別境界との
距離（マージン）を最大化する


# Page. 6

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

数学的準備
◦データとラベル
◦ 𝒙1 , … 𝒙𝑁 ; 𝒙𝑖 ∈ 𝑅𝐷
◦ 𝑦1 , … , 𝑦𝑁 ; 𝑦𝑖 ∈ {1, −1}
◦識別関数
◦ 𝑓 𝒙𝑖 ; 𝜃 これは 𝑦𝑖 に近い値を返す
◦ 線形識別関数 𝑓 𝒙; 𝒘, 𝑏
=𝒘⋅𝒙+𝑏


# Page. 7

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

係数の大きさとマージン
◦線形識別関数 𝑓 𝒙; 𝒘, 𝑏
=𝒘⋅𝒙+𝑏
◦ サポートベクター𝑥𝑖 に対し
𝒘 ⋅ 𝒙𝑖 + 𝑏 = 1
となるように 𝒘, 𝑏 を正規化しておく
𝑤
𝒘⋅𝒙+𝑏 =0


# Page. 8

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

係数の大きさとマージン
サポートベクター
𝒙2
𝒘
𝒘 ⋅ 𝒙 + 𝑏 = −1
𝒙1
𝒘⋅𝒙+𝑏 =1
𝒘⋅𝒙+𝑏 =0
𝒘 ⋅ 𝒙1 + 𝑏 = 1
𝒘 ⋅ 𝒙2 + 𝑏 = −1
𝒘 ⋅ 𝒙1 − 𝒙2 = 2
𝒘
2
𝒙1 − 𝒙2 =
𝒘
𝒘
これは𝒙𝟏 − 𝒙2 の𝒘方向への射影
＝マージンの2倍
𝒘 が小さいほどマージンが大きい


# Page. 9

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

マージン最大化
目的関数
◦𝑅 𝜃
1 𝑁
= σ𝑖=1 𝑙 𝒘 ⋅ 𝒙𝑖 + 𝑏, 𝑦𝑖
𝑁
+ 𝒘 2
◦ ただし min 𝒘 ⋅ 𝒙𝑖 + 𝑏 = 1
𝑖
◦ 𝑙(𝑦 ′ , 𝑦):損失関数
′
0
𝑦
=𝑦
′
◦ バイナリ損失の場合 𝑙 𝑦 , 𝑦 = ቊ
1 𝑦′ ≠ 𝑦
◦ ただしバイナリ損失は最適化が難しい
→ヒンジ損失


# Page. 10

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

マージン最大化
◦ヒンジ損失
◦ 満たすべき条件
◦ 𝒘 ⋅ 𝒙𝑖 + 𝑏 ≥ 1 𝑖𝑓 𝑦𝑖 = 1
𝒘 ⋅ 𝒙𝑖 + 𝑏 ≤ −1 𝑖𝑓 𝑦𝑖 = −1
◦ まとめると 𝑦𝑖 𝒘 ⋅ 𝒙𝑖 + 𝑏 ≥ 1
◦ ヒンジ損失関数
◦ 𝑙 𝑦 ′ , 𝑦 = 𝐻1 𝑦 ′ 𝑦 = max(0,1 − 𝑦 ′ 𝑦)
𝐻1 (𝑥)


# Page. 11

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

マージン最大化
◦目的関数
2
◦ 𝑅 𝜃 = 𝐶 σ𝑁
𝐻
(𝒘
⋅
𝒙
+
𝑏)𝑦
+
𝒘
𝑖
𝑖
𝑖=1 1
誤り最小化
定数
マージン最大化


# Page. 12

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

高次空間への非線形写像
◦ある次元では線形識別できない問題でも
高次空間なら解けることがある
𝑥2
Φ 𝑥 = (𝑥, 𝑥 2 )
𝑥
𝑥1


# Page. 13

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

高次空間での識別
◦識別関数
◦𝑓 𝒙 = 𝒘 ⋅ Φ 𝒙 + 𝑏
◦重みwは非常に大きい次元のベクトル
◦ 直接最適化することは難しい
◦学習データによって学習可能な重みは何
か？


# Page. 14

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

学習データから学習できる
重み
◦学習データ𝒙1 , … 𝒙𝑁
→サンプルΦ 𝒙1 , … Φ 𝒙𝑁
◦重みベクトルwを、サンプルの重み付き和
で表せる部分と表せない部分に分けてみる
◦ 𝒘 = 𝒘0 + σ𝑗 𝛼𝑗 Φ(𝒙𝑗 )
◦ 𝒘0 ⋅ Φ 𝒙𝑗 = 0 for all j


# Page. 15

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

学習データから学習できる
重み
◦目的関数
= 𝐶 σ𝑁
𝑖=1 𝐻1 (𝒘 ⋅ Φ(𝒙𝑖 ) + 𝑏)𝑦𝑖
◦𝑅 𝜃
◦ ここで
◦ 𝒘 ⋅ Φ 𝒙𝑖 + 𝑏 = 𝒘0 + σ𝑗 𝛼𝑗 Φ 𝒙𝑗
1
+
2
⋅ Φ 𝒙𝑖 + 𝑏
= 𝒘0 ⋅ Φ 𝒙𝑖 + ෍ 𝛼𝑗 Φ 𝒙𝑗 ⋅ Φ 𝒙𝑖 + 𝑏
𝑗
= ෍ 𝛼𝑗 Φ 𝒙𝑗 ⋅ Φ(𝒙𝑖 ) + 𝑏
𝑗
𝒘 2


# Page. 16

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

学習データから学習できる
重み
◦前の式から
◦ 𝒘0 = 0と置いても識別誤りには影響がない
◦ 𝒘0 = 0と置いた方が 𝑤 2 は小さくなる
◦以上のことから
◦ 𝒘 = σ𝑖 𝛼𝑖 Φ(𝒙𝑖 )と置いてよい
◦ 学習データだけによって張られる次元内の1点
◦識別関数は
◦ 𝑓 𝒙 = σ𝑖 𝛼𝑖 Φ(𝒙𝑖 ) Φ 𝒙 + 𝑏 = σ𝑖 𝛼𝑖 Φ 𝒙𝑖 ⋅ Φ 𝒙 + 𝑏


# Page. 17

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

カーネル関数
◦識別関数
◦ 𝐾 𝒙, 𝒙′ = Φ 𝒙 ⋅ Φ(𝒙′ )とおく
◦ 𝑓 𝒙 = σ𝑖 𝛼𝑖 Φ 𝒙𝑖 ⋅ Φ 𝒙 + 𝑏 = σ𝑖 𝛼𝑖 𝐾 𝒙𝑖 , 𝒙 + 𝑏
◦ 関数𝐾(𝒙, 𝒙′ )：カーネル関数
◦カーネル関数に工夫
◦ 「高次空間に写像して内積」
→「内積の非線形関数」


# Page. 18

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

カーネルトリック
◦非線形なカーネル関数を使うと？
◦ 例えば 𝐾 𝒙, 𝒚 = 𝒙 ⋅ 𝒚 2
◦ xが2次元の場合
◦
𝒙⋅𝒚 2 =
2
𝑥1 , 𝑥2 ⋅ 𝑦1 , 𝑦2
= 𝑥1 𝑦1 + 𝑥2 𝑦2 2
= 𝑥12 𝑦12 + 2𝑥1 𝑥2 𝑦1 𝑦2 + 𝑥22 𝑦22
= 𝑥12 , 2𝑥1 𝑥2 , 𝑥22 ⋅ (𝑦12 , 2𝑦1 𝑦2 , 𝑦22 )
◦ Φ 𝒙 = Φ 𝑥1 , 𝑥2 = (𝑥12 , 2𝑥1 𝑥2 , 𝑥22 )


# Page. 19

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

カーネルトリック
𝐾 𝒙, 𝒚 = 𝒙 ⋅ 𝒚 + 1 2
◦２次の多項式カーネル
◦2次元の場合
◦ Φ(𝒙) = (𝑥12 , 2𝑥1 𝑥2 , 𝑥22 , 2𝑥1 , 2𝑥2 , 1)
◦3次元の場合
◦ Φ(𝒙) = (𝑥12 , 𝑥22 , 𝑥32 , 2𝑥1 𝑥2 , 2𝑥1 𝑥3 , 2𝑥2 𝑥3 ,
2𝑥1 , 2𝑥2 , 2𝑥3 , 1)


# Page. 20

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

カーネルトリック
𝐾 𝒙, 𝒚 = 𝒙 ⋅ 𝒚 + 1 3
◦３次の多項式カーネル
◦2次元の場合
◦ Φ 𝒙 = (𝑥13 , 3𝑥12 𝑥2 , 3𝑥1 𝑥22 , 3𝑥23 ,
3𝑥12 , 6𝑥1 𝑥2 , 3𝑥22 , 3𝑥1 , 3𝑥2 , 1)


# Page. 21

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

カーネルトリック
𝐾 𝒙, 𝒚 = exp 𝛾 𝒙 − 𝒚 2
◦ Radial Basis Function (RBF)カーネル
◦ Expをテイラー展開すると無限級数
⇒無限に高い次元への写像
◦ 𝒙−𝒚 2 = 𝒙−𝒚 𝑡 𝒙−𝒚
= 𝒙𝑡 𝒙 − 2𝒙𝑡 𝒚 + 𝒚𝑡 𝒚
= 𝒙 2 + 𝒚 2 − 2𝒙 ⋅ 𝒚


# Page. 22

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

SVMの学習
◦解くべき問題
෠
◦ 𝒘 = σ𝑗 𝛼𝑗 Φ(𝒙𝑗 ) = 𝑋𝜶
◦ 𝜶 = 𝛼1 … 𝛼𝑁 𝑡 , 𝑋෠ = Φ 𝒙1 , … Φ 𝒙𝑁
1
◦ 目的関数
2
2
1 𝑡 𝑡
෠ → min
= 𝜶 𝑋෠ 𝑋𝜶
2
𝒘
◦ 条件 𝒘 ⋅ Φ 𝒙𝑖 + 𝑏 𝑦𝑖 ≥ 1,∀i
→ σ𝑗 𝛼𝑗 Φ 𝒙𝑗 Φ 𝒙𝑖 + 𝑏 𝑦𝑖 − 1 ≥ 0
𝑌 𝐾𝜶 + 𝑏𝟏 − 𝟏 ≥ 0
𝑌 = 𝑑𝑖𝑎𝑔 𝑦𝑖 , 𝟏 = 1, … , 1 𝑡


# Page. 23

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

SVMの学習
◦最小化すべきもの
1
◦
2
𝒘
グラム行列
2 = 1 𝜶𝑡 𝑋
෠ 𝑡 𝑋𝜶
෠ = 1 𝜶𝑡 𝐾𝜶
2
2
◦ 𝐾 = Φ 𝒙𝑖 Φ 𝐱j
= {𝐾 𝒙𝑖 , 𝒙𝑗 }
◦制約条件
◦ 𝟏 − 𝑌 𝐾𝜶 + 𝑏𝟏 ≤ 0
◦目的関数（最小化）
1 𝑡
◦ 𝐿 = 𝜶 𝐾𝜶 + 𝝀𝑡 𝟏 − 𝑌 𝐾𝜶 + 𝑏𝟏
2
𝝀𝑡 = 𝜆1 , … , 𝜆𝑁 , 𝜆𝑖 ≥ 0


# Page. 24

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

SVMの学習
1 𝑡
◦𝐿 = 𝜶 𝐾𝜶 + 𝝀𝑡 𝟏 − 𝑌 𝐾𝜶 + 𝑏𝟏
2
𝜕𝐿
◦
= 𝐾𝜶 − 𝐾𝑌𝝀 = 𝟎
𝜕𝜶
𝜕𝐿
◦ = −𝝀𝑡 𝑌𝟏 = 𝟎
𝜕𝑏
◦ここで𝜶, 𝑏を消去
1 𝑡
◦ 𝐿 = 𝝀 𝑌𝐾𝑌𝝀 − 𝝀𝑡 𝑌𝐾𝑌𝝀 + 𝝀𝒕 𝟏
2
1 𝑡
𝑡
= − 𝝀 𝑌𝐾𝑌𝝀 + 𝝀 𝟏
2
◦ 制約 𝜆𝑖 ≥ 0, σ𝑖 𝜆𝑖 𝑦𝑖 = 0
２次計画問題


# Page. 25

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

SVMの学習
◦通常の２次計画法で問題は解ける
◦ 𝝀が求まる
◦ 𝜶 = 𝑌𝝀 つまり 𝛼𝑗 = 𝑦𝑗 𝜆𝑗
1
◦ 𝑏 = σ𝑖 𝑦𝑖 − σ𝑗 𝛼𝑗 𝐾(𝒙𝑗 , 𝒙𝑖 )
𝑁
◦識別境界に寄与するのはその周辺の
データだけ
→これまでの学習をサポートベクター
だけ使って行う
◦ 高速化、高精度化


# Page. 26

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

例
◦1次多項式カーネル


# Page. 27

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

例
◦2次多項式カーネル


# Page. 28

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

例
◦3次多項式カーネル


# Page. 29

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

例
◦10次多項式カーネル


# Page. 30

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

例
◦RBFカーネル γ=1


# Page. 31

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

例
◦RBFカーネル γ=0.1


# Page. 32

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

演習
Wine dataset*を使って、SVMと決定木ベー
スの手法の性能を比較してみよう。
◦ http://archive.ics.uci.edu/ml/datasets/Wine
◦ ワインの化学分析結果と等級(class)のデータ
◦ 分析結果から等級を予測する
SVMと決定木ベース手法は何を使ってもよい
◦ 決定木ベース手法やSVMにはハイパーパラメータが
あることに注意
◦ ハイパーパラメータチューニングに別なデータセッ
トを使う必要はないが、ハイパーパラメータの違い
による影響は見ること


# Page. 33

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

何を使うか
◦ Python
◦ Scikit-learnに含まれているパッケージ
◦ sklearn の svm, tree（決定木）
◦ sklearn.ensamble の RandomForestFlassifier,
AdaBoostClassifier
◦R
◦ SVM
◦ e1071パッケージのsvm
◦ kernlabパッケージのksvm
◦ 決定木
◦ rpartパッケージのrpart
◦ Random Forest
◦ randomForestパッケージのrandomForest
◦ AdaBoost
◦ rboosterパッケージのbooster
◦ mlpackパッケージのadaboost


# Page. 34

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

何を使うか
◦ WEKA
◦ 標準で入っていないパッケージはToolsのパッケージマネー
ジャからダウンロード・追加することができる


# Page. 35

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

何を使うか
◦ SVM
◦ libSVM, libLINEAR
◦ 決定木
◦ J48
◦ RandomForest
◦ AdaBoost
◦ AdaBoostM1


# Page. 36

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

WEKAを使う例
◦ Weka ExplorerのPreprocessタブの [Open File…]
からwine_train.arffを開く


# Page. 37

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

WEKAを使う例
◦ Classifyタブに移り、[Choose]から適当な識別器を
選ぶ
◦ Test optionsでは[Supplied test set]を選び、ダイ
アログからwine_test.arffを選んで、目的変数class
を選ぶ


# Page. 38

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

WEKAを使う例
◦ 目的変数として(Nom)classを選び、[start]で学習・識別開始


