2016/04/15
Python課題発表
改定
佐々木俊樹
1. 課題テーマ
1.1. 課題の内容
1.2. データセット
2. SVMについて
2.1. SVMとは
2.2. 識別面の決定
2.3. マージン最大化
マージン最大化の条件
2.4. ソフトマージンSVM
3. コード説明と結果
3.1. コードの説明
3.2. 交差検定
3.3. 結果
4. まとめ
アジェンダ
1
1. 課題の内容
2
課題の内容
手書き文字の3と8を
SVMを用いて識別し
その正解率を求める
( ソフトマージンSVM )
3
ラベルが3のデータ:183枚 ラベルが8のデータ:174枚
データセット [F. Pedregosa+2011]
4
データサイズ:8画素 × 8画素 64次元
2. SVMとは
5
パターン認識手法の一種
【マージン最大化】という基準で、
2クラスのパターン識別器を構成する
非線形SVMもあるが、今回は線形SVMに関して
SVMとは [Bishop2012]
6参考:http://home.hiroshima-u.ac.jp/tkurita/lecture/svm.pdf
Support Vector Machineの略称
データ
(クラスB)
データ
(クラスA)
2クラスの識別面を学習によって定める
識別面の決定 (1/4)
どのように識別面を決定するのか
7参考:http://www.slideshare.net/mknh1122/svm-13623887
・学習サンプル群: 𝒙
𝒙 𝒙 = 𝒙1, 𝒙2, … , 𝒙 𝑛
・教師信号: 𝑦
各サンプルは
𝑦𝑖 = +1と𝑦𝑖 = −1に
ラベルを振り分けておく
𝑖 = 1,2, … , 𝑛
𝑦𝑖 = −1
𝑦𝑖 = +1
識別面の決定 (2/4)
8
𝑔 𝑥 = 0 : 識別面
𝑔 𝑥 > +1 : クラスAと判定
𝑔 𝑥 < −1 : クラスBと判定
𝑔 𝑥 = −1𝑔(𝑥) = 1
𝑔(𝑥) = 0
クラスB𝑔(𝑥) = 𝒘 𝑇
𝒙 + 𝑏
線形識別関数 𝑔 𝑥
𝑤:重みベクトル
𝑥 :学習サンプル
𝑏 :ベクトル項
クラスA
識別面の決定 (3/4)
9
𝑔(𝑥) = 𝒘 𝑇
𝒙 + 𝑏
線形識別関数 𝑔 𝑥
クラスB
𝑤:重みベクトル
𝑥 :学習サンプル
𝑏 :ベクトル項
以上の条件を満たす
𝒘と 𝑏を
学習によって求める
𝑔 𝑥 = −1𝑔(𝑥) = 1
クラスA
𝑔(𝑥) = 0
識別面の決定 (4/4)
10
未知データに対して正解する能力
汎化能力
マージン最大化 未知データ
あげるために
を用いる
A
B
SVMの特徴
11
他クラスに一番近いデータの
マージンが
最大になるように
𝒘と 𝑏を決定する
マージン
マージン最大化
12
クラスA
クラスB
𝑦𝒊(𝒘 𝑇 𝒙𝒊 + 𝑏) ≥ 1
線形識別の識別面が
存在するための条件
𝑦𝑖 = −1
𝑦𝑖 = 1
𝑔 𝑥 = −1𝑔(𝑥) = 1
𝑔(𝑥) = 0
𝒈(𝒙)を決定するための
パラメータの候補は無数に存在する
一意に求まるように条件を定義する
制約条件
マージン最大化の条件 (1/3)
13
𝑔 𝑥 = −1𝑔(𝑥) = 1
𝑔(𝑥) = 0
𝒘 𝑇
(𝒙 𝐴 − 𝒙 𝐵) = 2
(𝒙 𝐴 − 𝒙 𝐵) =
2
𝒘
𝟏
𝒘
マージンの距離:
൝
𝒘 𝑇 𝒙 𝐴 + 𝑏 = +1
𝒘 𝑇
𝒙 𝐵 + 𝑏 = −1
マージン
マージン最大化の条件 (2/3)
𝑔(𝑥) = 𝒘 𝑇
𝒙 + 𝑏
14
𝟏
w
𝑔(𝑥) = 0
𝑦𝑖(𝒘 𝑇
𝒙𝒊 + 𝑏) ≥ 1
𝟏
𝒘
マージンの距離
を最大化するために、
を小さくする
制約条件
のもと、
𝒘
重みベクトル
(計算方法については今回はやらない)
マージン
𝟏
w
マージン最大化の条件 (3/3)
15
サンプルが綺麗に分離できないことがある
ソフトマージンSVM
実際には
16
マージンが最大である必要が
ないようにする
識別面で分離に失敗するデータが
あっても許容する
特徴
ソフトマージンSVM
17
3. コードの解説と結果
18
パッケージのインポート
手書き文字の読み込み
手書き文字データから
3と8の画像データを
とりだす
それぞれ+1と-1に
ラベルを振り分ける
コードの解説 (1/4)
19
コードの解説 (2/4)
さきほどのデータ
data_three , data_eight
label_three , label_eight
を連結
交差検定
のためにデータを分割
20
データを複数に分割し、
その中の1つをテストデータ、
残りを訓練データとして評価を行う
1 2 3 … K
12 3 … K
訓練データ テストデータ
1 2 3 … K
…
…
交差検定
21 3 … K
21
コードの解説 (3/4)
ソフトマージンSVMを
用いて3と8を識別
最終的な正解率を
求めるため
加算する
混同行列を求めるために
データを連結
モデルごとの正解率を
計算・表示
交差検定で分割した分を
繰り返す
22
コードの解説 (4/4)
正解率の計算
正解率の表示
混同行列を表示
混同行列を計算
23
結果 (1/2)
24
グループ 1 2 3 4 5
混同行列
[ [ 41 0 ]
[ 0 31 ] ]
[ [ 31 0 ]
[ 1 40 ] ]
[ [ 30 0 ]
[ 0 42 ] ]
[ [ 40 0 ]
[ 0 32 ] ]
[ [ 37 0 ]
[ 0 35 ] ]
正解率 1.0 0.99 1.0 1.0 1.0
結果 (2/2)
25
99.7 %
汎化能力
[ [ 190 0 ]
[ 1 169 ] ]
混同行列
T
r
u
e
predict
3 8
3
8
4. まとめ
26
高い正解率で3と8を識別することができた
まとめ
Pythonの使い方に少し慣れた
SVMの理解にはまだ時間が必要である
27

SVM