SVM - 東京工業大学...サポートベクターマシン (Support Vector Machine, SVM)...
Transcript of SVM - 東京工業大学...サポートベクターマシン (Support Vector Machine, SVM)...
— カーネル関数を用いた判別分析の方法 —
サポートベクターマシン(SVM)
• 2値判別
∗ ハードマージン SVM
∗ ソフトマージン SVM
• 多値判別
∗ Error Correcting Output Coding
1/56
サポートベクターマシン(Support Vector Machine, SVM)
2値判別のための代表的な学習法
• データから判別境界までの距離を大きくする:マージン最大化規準
• パラメータ推定のための計算:凸2次計画問題(解きやすい)
• カーネル関数を使ったモデリングが可能
2/56
問題設定
データ:(x1, y1), . . . , (xn, yn)
xi ∈ Rd, yi ∈ {+1,−1}
−6 −4 −2 0 2 4
−4−2
02
4
線形判別器を学習:
H = {sign(f(x)) | f(x) = wTx+ b, w ∈ Rd, b ∈ R}
3/56
線形分離可能なデータ• データ (x1, y1), . . . , (xn, yn) が 線形分離可能:ある線形判別器 h ∈ H が存在して
h(xi) = yi, ∀i = 1, . . . , n.
−2 −1 0 1 2
−10
12
linearly separable
x1
x2
−6 −4 −2 0 2 4 6−6
−4−2
02
46
linearly non−separable
x1
x2
4/56
線形分離可能なデータの学習ハードマージンSVM
(x1, y1), . . . , (xn, yn) が f(x) = wTx+ b で線形分離可能なら
yi = +1 =⇒ wTxi + b > 0,
yi = −1 =⇒ wTxi + b < 0.
これらの条件を合わせて記述すると
yi(wTxi + b) > 0, i = 1, . . . , n. (1)
• 式 (1) を満たす w, b のなかでどれが良いか?
5/56
マージン最大化基準� �ラベル間の距離(マージン)を最大化� �
w!1 x + b1 = 0
w!2 x + b2 = 0
マージン
マージン
wT1 x+ b1 = 0 で分けるほうが
wT2 x+ b2 = 0 で分けるよりも良さそう
6/56
マージン最大化規準の定式化
x0からwTx+ b = 0までの距離=|wTx0 + b|
∥w∥.
x0
wTx + b = 0
Exercise 1. x0からwTx + b = 0 までの距離が上式で与えられることを確認.
7/56
マージン最大化規準� �データから判別境界までの距離の最小値を最大化:
maxw, b
mini=1,...,n
|wTxi + b|∥w∥
subject to yi(wTxi + b) > 0, i = 1, . . . , n
� �
マージン最大化は以下と等価
minw∈Rd, b∈R
∥w∥2
2s.t. yi(w
Txi + b) ≥ 1, i = 1, . . . , n
[ (w, b) 7→ (cw, cb), c > 0 で不変.mini yi(wTxi + b) = 1とscaling ]
• 凸2次計画問題:効率的な数値計算法がある.
8/56
最適解:(w, b).ハードマージンSVMによる判別器:
h(x) = sign(wTx+ b)
note: データが線形分離可能でないとき,最適解は存在しない.
9/56
線形分離不可能なデータの学習ソフトマージンSVM
学習データ:(x1, y1), . . . , (xn, yn),
xi ∈ Rd, yi ∈ {+1, −1}.
−8 −6 −4 −2 0 2 4 6
−4−2
02
46
linearly non−separable
x1
x2データは一般に線形分離可能ではない
=⇒ ハードマージンSVMでは学習できない
10/56
線形分離不可能なデータの学習
分離できないデータにペナルティを与える.
線形判別器 : h(x) = sign(wTx+ b).
• yi(wTxi + b) ≥ 1 が成り立っていれば
[データ(xi, yi)に対する損失]= 0
• yi(wTxi + b) < 1 のとき:以下の損失を被る
[データ(xi, yi)に対する損失]= 1− yi(wTxi + b) > 0
11/56
結局,[損失]= max{1− yi(wTxi + b), 0} と書ける
[損失]の平均
=1
n
n∑i=1
max{1− yi(wTxi + b), 0}
マージン
損失
損失
w!x + b = ±1
12/56
ソフトマージン SVM の定式化
線形分離不可能なデータを扱いたい
• 小さくしたい量:
∗ マージンの大きさの逆数:∥w∥2
2(マージンを大きく)
∗ 線形分離できない度合い: 1
n
n∑i=1
max{1− yi(wTxi + b), 0}
13/56
ソフトマージンSVM� �
minw∈Rd,b∈R
C
n
n∑i=1
max{1− yi(wTxi + b), 0}+ 1
2∥w∥2
� �
• 正則化パラメータ C > 0:2つの量のバランスを調整
∗ C は正則化項付きカーネル回帰の 1/λ に相当.
• ソフトマージンSVMも凸2次最適化問題.
14/56
ソフトマージンSVMによる判別器の推定
-4 -2 0 2 4
-2-1
01
23
-1 0 1 2
-2-1
01
C = 1 として学習
• 線形分離不可能なデータ(左)でも判別器を学習できる.
• 線形分離可能なデータ(右)にも使える
15/56
ソフトマージン線形判別(Rcode-linearsvm.r)
• 初期設定
> library(kernlab) #kernlab読込(ksvm, predictなどを使う)> library(mlbench) #mlbench読込(mlbench.2dnormals)
• 学習データの生成
> dat <- mlbench.2dnormals(200,cl=2,sd=1)> plot(dat) # データのプロット> x <- dat$x; y <- dat$classes # x:入力,y:ラベル
16/56
• 線形判別器で学習
> linsvm <- ksvm(x,y,type="C-svc",kernel="vanilladot")> linsvm # 結果を表示Support Vector Machine object of class "ksvm"SV type: C-svc (classification)parameter : cost C = 1 # defaultはC=1Linear (vanilla) kernel function. # 線形カーネルNumber of Support Vectors : 48Objective Function Value : -43.6092Training error : 0.065 # 学習誤差6.5%>> mean(predict(linsvm,x) != y) # 学習誤差を別途計算[1] 0.065 # 確かに6.5%になっている
17/56
• 予測誤差の計算
> # テストデータの生成> test_dat <- mlbench.2dnormals(1000,cl=2,sd=1)> tx <- test_dat$x; ty <- test_dat$classes> py <- predict(linsvm,tx) # tx のラベルを予測> mean(py != ty) # test_datに対する予測誤差[1] 0.082 # 予測誤差8.2%
18/56
カーネルSVM
• 線形判別器 h(x) = sign(wTx+ b) では予測精度が低いこともある.
• SVMにカーネル関数を適用.表現力を上げる.
カーネル関数を適切に選べば,複雑な判別境界を学習できる.
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
linear kernel
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
poly: degree=2
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
poly: degree=3
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
Gaussian: sigma=1
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
linear kernel
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
poly: degree=2
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
poly: degree=3
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
Gaussian: sigma=1
線形カーネル ガウシアンカーネル
19/56
カーネルSVMの定式化
カーネル回帰と同様に,データを高次元に写像
x ∈ Rd 7−→ ϕ(x) ∈ RD
データ (ϕ(x1), y1), . . . , (ϕ(xn), yn)
minw∈RD,b∈R
C
n
n∑i=1
max{1− yi(wTϕ(xi) + b), 0}+ 1
2∥w∥2
20/56
最適解 w, b が満たす条件を考える.
• 正則化付きカーネル回帰と同じ議論
• w ∈ span{ϕ(x1), . . . ,ϕ(xn)} の範囲で考えれば十分.
φ(x1). . .
φ(xn)
w高次元空間 RD
21/56
w =
n∑j=1
αjϕ(xj) とおいて目的関数に代入.
k(x,x′) = ϕ(x)Tϕ(x′) とおく.� �
minα,b
C
n
n∑i=1
ℓ
( n∑j=1
αjk(xj,xi) + b, yi
)+
1
2
n∑i,j=1
αiαjk(xj,xi)
• 損失:ℓ(f(x), y) = max{1− yf(x), 0}
• 最適解:α1, . . . , αn, b −→ w =n∑
i=1
αiϕ(xi)
• 判別器:sign(wTϕ(x) + b
)= sign
(n∑
i=1
αik(xi,x) + b
)� �
22/56
凸2次最適化問題
minα,b,ξ
C
n
n∑i=1
ξi +1
2
n∑i,j=1
αiαjKij
s. t. 0 ≤ ξi, 1− yi
( n∑j=1
αjKij + b
)≤ ξi, i = 1, . . . , n.
note:
• K = (k(xi,xj))ij ⪰ O なので目的関数は凸2次関数,制約式は1次不等式.
• max{a, 0} = min{ξ | 0 ≤ ξ, a ≤ ξ}
23/56
ソフトマージン・カーネルSVM(Rcode-kernelsvm.r)
• 初期設定・データ生成
> library(kernlab); library(mlbench)> d<-mlbench.spirals(300,c=1,sd=0.15) # 学習データ> td<-mlbench.spirals(1000,c=1,sd=0.15) # テストデータ
24/56
• 2次多項式カーネル
> sv2 <- ksvm(d$x,d$c,kernel="polydot",kpar=list(degree=2))> sv2 # 学習結果の表示Hyperparameters : degree = 2 scale = 1 offset = 1Training error : 0.423333> mean(predict(sv2,td$x)!=td$c) #予測誤差の計算[1] 0.436
• 3次多項式カーネル
> sv3 <- ksvm(d$x,d$c,kernel="polydot",kpar=list(degree=3))> sv3 # 学習結果の表示Hyperparameters : degree = 3 scale = 1 offset = 1Training error : 0.166667> mean(predict(sv3,td$x)!=td$c) #予測誤差の計算[1] 0.175
25/56
• 正則化パラメータのデフォルト値:C = 1.
• degree=2 と degree=3 で予測誤差が大きく異なる.
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
linear kernel
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
poly: degree=2
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
poly: degree=3
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
Gaussian: sigma=1
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
linear kernel
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
poly: degree=2
-1.0 -0.5 0.0 0.5 1.0-1.0
0.00.51.0
poly: degree=3
-1.0 -0.5 0.0 0.5 1.0
-1.0
0.00.51.0
Gaussian: sigma=1
多項式カーネル degree = 2 多項式カーネル degree = 3
26/56
カーネルSVMのモデルパラメータの選択
• モデルパラメータ:{カーネル,正則化} パラメータ
∗ 多項式カーネル (1 + xTz)degree:degree と C.∗ ガウシアンカーネル exp{−sigma∥x− z∥2}: とsigma と C.sigma のヒューリスティクス: median{1/∥xi − xj∥2 : i = j}
• 交差検証法で予測誤差を推定=⇒ 適切なモデルパラメータを決める.
∗ 評価の規準:
誤り確率 =1
N
N∑j=1
1[ ytest,j = h(xtest,j) ]
27/56
多項式判別器: {sign(f(x)) | f(x)は k 次以下の多項式}.予測誤差を小さくする次数 k は何か
poly: degree=2 poly: degree=5 poly: degree=8
28/56
ガウシアンカーネルを用いて学習.sigma が大きいほど,複雑な判別境界を表現できる.
Gauss: sigma=0.1 Gauss: sigma=3 Gauss: sigma=20
29/56
• ksvm の cross オプションで交差検証法を実行できる.
> sv<-ksvm(x,y,cross=10,kernel=’rbfdot’,kpar=list(sigma=1),C=1)
> cross(sv)
30/56
交差検証法で適切なモデルパラメータを選択(Rcode-cv-kernelsvm-sigma.r)
• 初期設定,データ生成
> library(kernlab); library(mlbench) #パッケージ読込> dat<-mlbench.spirals(200,c=1.2,sd=0.16)#データ生成> x<-dat$x; y <- dat$classes
• 交差検証法の実行
> s_candidate<-seq(0.01,10,length=20) #sigmaの候補> cv_err <- c()> for(s in s_candidate){#5重cvで予測誤差を推定+ ksv <- ksvm(x,y,cross=5,kernel=’rbfdot’,kpar=list(sigma=s),C=1)+ cv_err <- c(cv_err,cross(ksv))}> # cv_err:各sigmaに対する予測誤差のcv値の配列
31/56
• 最適なsigma,予測誤差のプロット
> opt_sigma <- s_candidate[which.min(cv_err)]> opt_sigma # 最適なsigma[1] 5.267895> plot(s_candidate,cv_err,lwd=2) # プロット
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
0 5 10 15 20
0.25
0.30
0.35
0.40
0.45
sigma_candidate
pred
_est
32/56
数値例 1/2:sigmaを交差検証法で決定.
• 正則化パラメータ C = 1,
●● ● ●
●
●● ●●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
● ●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
gaussian kernel: sigma=0.01
●● ● ●
●
●● ●●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
● ●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
gaussian kernel: sigma=6.21
!! ! !
!
!! !!
!
!
!!
!!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!!
!
!
!
!
!!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
! !
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
! !!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
! !
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
gaussian kernel: sigma=20
sigma = 0.01 最適値 sigma = 6.21 sigma = 20
予測誤差:0.423 予測誤差:0.194 予測誤差:0.209
33/56
数値例 2/2:C を交差検証法で決定 (C : 1 ∼ 104 · n)
• sigmaに対するヒューリスティクス:sigma = 0.331.
●
●
●
●
●
●
●● ●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●●
●
●●
●
●
●●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
● ●●
●
●
●
●●
●
●
●
●
●
●
●
● ●
●
●●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●●
●
●●
●
●
●●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
● ●●
●
●
●
●●
●
●
●
●
●
●
●
● ●
●
●●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●●●
●
●
●
●
●
●●●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●
●●
●
●●
●
●
●●●
●
●●
●
●
●●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
● ●●
●
●
●
●●
●
●
●
●
●
●
●
● ●
●
●●●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
C = 1 最適値 C = 404.9 C = 2 · 106
予測誤差:0.278 予測誤差:0.193 予測誤差:0.250
34/56
多値判別
• ラベルの種類が3つ以上: y ∈ Y = {1, 2, . . . , G}
∗ 数字の読み取り,アルファベットの読み取り,など
• 方法は大きく分けて2通り
アプローチ1: 複数の2値判別に分割,それぞれ学習,統合.アプローチ2: 多値判別の判別関数を直接学習
35/56
アプローチ1(2値判別法の組合せ)を解説する.アプローチ2と比較して・・・
• 利点:実装が簡単.既存の2値判別法(SVMなど)を組み合わせるだけ.
• 欠点
∗ 理論的な精度保証が(あまり)ない∗ 各クラスのデータ数に偏りがあるとき予測精度が低い傾向.
36/56
• one-vs-one 法
• one-vs-all (one-vs-rest) 法
• 一般化:Error correcting output coding (ECOC)
37/56
one-vs-one 法
データ:(x1, y1), . . . , (xn, yn).
学習法:2クラス間の学習� �
1. 2つのラベル y, y′ ∈ Y を選ぶ.
2. ラベル y, y′ のデータのみを使う.2値判別の仮説を学習.
hyy′(x) =
+1, x のラベルを y と予測−1, x のラベルを y′ と予測
3. ラベルのすべての組合せy, y′について hyy′(x)を求める.
• G(G− 1)/2の仮説.ただし hyy′(x) = −hy′y(x).� �
38/56
予測法:多数決� �
1. 新たな入力 x
2. ラベル y のスコア score(y) を計算:
score(y) = |{y′ ∈ Y |hyy′(x) = +1}|
意味:ラベル y に関する仮説 hy1, . . . , hyG の中で,x のラベルを y と予測する仮説の数.
3. score(y) の値が最大になる y を x の予測ラベルとする.
y = argmaxy∈Y
score(y)
� �
39/56
例:one-vs-one 法• 学習:多値判別を複数の2値判別に分割
training data red(1) vs. green(2)
green(2) vs. black(3) red(1) vs. black(3)
( ha,b(x) : ラベルが a なら +1, b なら −1 を返す )
40/56
• 予測:多数決による予測.図のX のラベルを予測.
score(y) :=「Xのラベルを y と判別する判別器の数」
y score(y)
red(1) – h1,2 = −1 h1,3 = +1 1
green(2) h2,1 = +1 – h2,3 = +1 2
black(3) h3,1 = −1 h3,2 = −1 – 0
したがって X の予測ラベルは green.
41/56
例:正規分布モデルLinear kernel Gaussian kernel
42/56
one-vs-all (one-vs-rest) 法
学習法:
1. ラベル y とそれ以外を判別.判別関数 fy(x) を学習:
sign(fy(x)) =
+1, x のラベルを y と予測
−1, x のラベルを y 以外と予測
2. 上のプロセスを y ∈ Y について実行.fy(x), y ∈ Y を得る.
43/56
x のラベルを予測:
判別関数による予測� �
1. fy(x), y ∈ Y の値を計算 (実数値)
2. 最大値をとるラベルを予測とする:y = argmaxy∈Y
fy(x).� �
仮説による予測� �
1. すべての仮説の出力 hy(x) = sign(fy(x)), y ∈ Y を計算.
2. hy(x) = +1 となるラベル y を予測ラベルとする.
y = {y ∈ Y |hy(x) = +1}.
note: +1が複数 or ひとつもない ⇒ 予測ラベルが決まらない� �
44/56
例:one-vs-all法ラベル:● ● ●.残りのラベルを●でプロット.
training data black(1) vs rest
red(2) vs rest green(3) vs rest
X の予測ラベルは green.
45/56
誤り訂正出力符号化法(ECOC)
• 誤り訂正符号の考え方を応用
• one-vs-one,one-vs-all の一般化:
References:
Dietterich, Bakiri, Solving Multiclass Learning Problems via Error Correcting Output
Codes, Journal of Artificial Intelligence Research, vol. 2 Issue 1, pp. 263-286,
1994.
Allwein, Schapire, Singer, Reducing multiclass to binary: a unifying approach for
margin classifiers, The Journal of Machine Learning Research, vol. 1, pp. 113-141,
2001.
46/56
学習� �
• 各ラベル y に符号語 cy = (cy1, . . . , cyT ) ∈ {+1,−1, 0}T を対応させる.
例:
t (T = 5)
label 1 2 3 4 5
1 (c1) −1 −1 −1 −1 0
2 (c2) +1 +1 −1 0 −1
3 (c3) 0 −1 +1 +1 −1
4 (c4) +1 0 −1 +1 +1
• t = 1, . . . , T に対して
∗ (xi, yi) を 2値データ (xi, cyit) に変換 (i = 1, . . . , n).∗ cyit = 0 のデータのみ用いて,2値仮説 ht(x) を学習.� �
47/56
予測� �
• x に対して ht(x) ∈ {+1,−1}, t = 1, . . . , T を計算.
• (h1(x), . . . , hT (x)) に最も近い cy = (cy1, . . . , cyT ) を探す.
対応するラベル H(x) を予測ラベルとする.
近さの測り方:ハミング距離.a, b ∈ {+1,−1, 0}に対して
d(a, b) =1− ab
2=
1, a = b, ab = 0
1/2, ab = 0
0, a = b = 0
H(x) = argminy∈Y
T∑t=1
d(cyt, ht(x))
(この定義だと距離の公理は満たさないが,便宜上距離とよぶ)� �
48/56
符号語cy (例:ラベル数4)
• one-vs-one:
t
label 1 2 3 4 5 6
1 (c1) +1 +1 +1 0 0 0
2 (c2) −1 0 0 +1 +1 0
3 (c3) 0 −1 0 −1 0 +1
4 (c4) 0 0 −1 0 −1 −1
∗ 各列に対応して,元データを2値に変換して学習.例:t = 1 ではラベル 1, 2 のデータのみ使用.
∗ ハミング距離で予測:score(y)と同じ:cytが0でない要素どうしを比較
49/56
• one-vs-all:仮説による予測
t
label 1 2 3 4
1 (c1) +1 −1 −1 −1
2 (c2) −1 +1 −1 −1
3 (c3) −1 −1 +1 −1
4 (c4) −1 −1 −1 +1
50/56
符号間の最小距離:ρ = miny,y′∈Y, y =y′
T∑t=1
d(cyt, cy′t).
• t 列目の符号化 → 仮説 ht(x) ∈ {+1,−1}
• ECOCで得られる仮説:H : X → Y
L(ht) =1
n
n∑i=1
d(cyit, ht(xi)):{(xi, cyit)}ni=1に対する学習誤差.
cyit = 0なら loss は1/2,そうでなければ0-1 lossで測る.
51/56
� �
H(x)の学習誤差 L(H) =1
n
n∑i=1
I[H(xi) = yi]
について次式が成立:
L(H) ≤ 2T
ρ· 1T
T∑t=1
L(ht),
ρ
T(符号間距離) 大きい =⇒ 学習誤差 小さい
� �
52/56
L(H)の評価式の証明: H(xi) = yi のとき,
∃y′ = yi,
T∑t=1
d(cyit, ht(xi)) ≥T∑
t=1
d(cy′t, ht(xi)) (2)
符号語 cyi, cy′ に対して T0, T−1を定義:
T0 = {t | cyitcy′t = 0}, T−1 = {t | cyitcy′t = −1}.
次式が成立 :
t ∈ T0 ⇒ d(cyit, ht(xi)) + d(cy′t, ht(xi)) ≥
1
2,
t ∈ T−1 ⇒ d(cyit, ht(xi)) + d(cy′t, ht(xi)) = 1.
53/56
(2)より
T∑t=1
d(cyit, ht(xi)) ≥1
2
T∑t=1
{d(cyit, ht(xi)) + d(cy′t, ht(xi))
}≥ 1
2
∑t∈T0∪T−1
{d(cyit, ht(xi)) + d(cy′t, ht(xi))
}
≥ 1
4|T0|+
1
2|T−1| =
1
2
T∑t=1
d(cyit, cy′t) ≥ρ
2
したがって
H(xi) = yi =⇒ 1 ≤ 2
ρ
T∑t=1
d(cyit, ht(xi)) よって
L(H) =1
n
n∑i=1
1[H(xi) = yi] ≤1
n
n∑i=1
2
ρ
T∑t=1
d(cyit, ht(xi)) =2T
ρ· 1T
T∑t=1
L(ht)
54/56
例:one-vs-one と one-vs-all の学習誤差
|Y| = G とする.
• one-vs-one:
ρ =G2 −G+ 2
4, T =
G(G− 1)
2=⇒ 2T
ρ< 4
ρ の計算:1bitは(+1,-1),他はどちらかが0を含むので G(G−1)/2−12 + 1.
∗ 1T
∑Tt=1 L(ht) < 1/4 なら意味ある結果.
∗ ただし cyt = 0 となることが多いので,L(ht) が大きめになる.
• one-vs-all: ρ = 2, T = G =⇒ 2T
ρ= G.
∗ 1T
∑Tt=1 L(ht) =
1T
∑Tt=1 L(ht) < 1/G なら意味ある結果.
55/56
• リード・ソロモン符号 (線形符号の一種):cyt ∈ {±1}.
t ∈ [ 1, ⌊(T − 1)/2⌋ ] such that G ≤ 2T−2t,
=⇒ ρ ≥ 2t+ 1,2T
ρ≤ 2T
⌊T − log2G⌋+ 1= 2 + εT,G, lim
T→∞εT,G = 0,
=⇒ 1
T
T∑t=1
L(ht) =1
T
T∑t=1
L(ht) <1
2 + εT,G. なら意味ある結果.
56/56