Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
名大集中講義:機械学習特論 ノート(2) カーネル法
1. カーネル関数を用いた回帰分析の方法
2. 正則化と交差検証法
3. カーネル関数を用いた判別分析の方法(SVM)
• 2値判別• 多値判別
1/96
回帰分析
• データ:(x1, y1), . . . , (xn, yn), xi ∈ Rd, yi ∈ R.
• y を xの関数で説明する
• 用語の説明
∗ x:入力(独立変数・説明変数)∗ y:出力(従属変数・目的変数)
2/96
データとモデリング
• 単純な統計モデルでは対応できない(かもしれない)−→ 複雑なモデルを使いたい
• 複雑なモデルを使うと
∗ 計算が大変∗ データへの過剰適合(過学習, overfitting)が心配
3/96
過剰適合
-2 -1 0 1 2
-20
24
6
x
y
• データ点に適合し過ぎている.予測精度は低い.4/96
表現力が高いモデルの構成
• 例:データ x ∈ R を高次元空間 R1000に非線形変換
x ∈ R 7−→ ϕ(x) ∈ R1000
• 高次元空間における線形モデルでデータ解析
5/96
� �「複雑な統計モデル」を「非線形変換+線形モデル」で実現� �
• 適切な変換 x 7−→ ϕ(x) を選ぶと,計算量はあまり増えない.
• 過学習には,正則化 + 交差検証 で対処.
6/96
— カーネル関数を用いた回帰分析の方法 —
• 最小2乗法のカーネル表現
7/96
例:多項式回帰
データ:{(x1, y1), . . . , (xn, yn)} ∈ R ×R.
-15 -10 -5 0 5 10 15
-0.5
0.0
0.5
1.0
x
y
• 多項式回帰:y = a0 + a1x+ a2x2 + · · ·+ aD−1x
D−1 + ε
で当てはめ.(ε : ノイズ項)
パラメータ (a0, a1, . . . , aD−1) ∈ RD に関して線形なので線形モデル.
8/96
• 多項式回帰の解釈:
∗ データ x を,以下の ϕ(x) で高次元にマップ.
x ∈ R 7−→ ϕ(x) = (ϕ0(x), ϕ1(x), . . . , ϕD−1(x))T ∈ RD,
ϕk(x) = xk, k = 0, 1, . . . , D − 1
∗ データ (ϕ(x1), y1), . . . , (ϕ(xn), yn) の関数関係を高次元空間 RD 上の線形モデルで推定:
y = a0ϕ0 + a1ϕ1 + a2ϕ2 + · · ·+ aD−1ϕD−1 + ε
−→ 推定パラメータ a = (a0, . . . , aD−1)T
∗ f(x) = aTϕ(x) を使って x に対する y の値を予測.
9/96
最小2乗法:デザイン行列を用いた表現
• デザイン行列 Φ = (ϕ(x1), . . . ,ϕ(xn)) ∈ RD×n.
• 観測データ y = (y1, . . . , yn)T.
n∑i=1
(yi − aTϕ(xi))2 = ∥y −ΦTa∥2 −→ a について最小化
rankΦ = D のとき:
最小2乗法の解 : a = (ΦΦT)−1Φy
10/96
最小2乗法:カーネル関数を用いた表現
mina∈RD
n∑i=1
(yi − aTϕ(xi))2
• a ∈ span{ϕ(x1), . . . ,ϕ(xn)} の範囲で考えれば十分.
直交成分は2乗損失に影響しない.
φ(x1). . .
φ(xn)
a
11/96
• a =n∑
j=1
βjϕ(xj) = Φβ, β = (β1, . . . , βn)T
−→ 2乗誤差に代入� �
n∑i=1
(yi − ϕ(xi)Ta)2 = ∥y −ΦTΦβ∥2 −→ min
β
極値条件 : ΦTΦΦT Φβ︸︷︷︸a
= ΦTΦy
� �
12/96
• k(x, x′) := ϕ(x)Tϕ(x′) ∈ R とおく (カーネル関数). 行列 K ∈ Rn×n を K = ΦTΦ とおく.� �
Kij = ϕ(xi)Tϕ(xj) = k(xi, xj),
極値条件 : ΦTΦΦTΦβ = ΦTΦy ⇐⇒ K2β = Ky� �
• 極値条件の式を解く:K, y から β が定まる(一意とは限らない)
f(x) = ϕ(x)Tn∑
i=1
ϕ(xi)βi︸ ︷︷ ︸a
=n∑
i=1
k(x, xi)βi
note: 解 β は一意でなくても f(x) は一意.
13/96
グラム行列
データ x1, . . . ,xn,関数 k(x,x′).
グラム行列 : K =
k(x1,x1) · · · k(x1,xn)
... . . . ...
k(xn,x1) · · · k(xn,xn)
∈ Rn×n.
要素で書くと Kij = k(xi,xj).
14/96
カーネル回帰分析の方法• データ:(x1, y1), . . . , (xn, yn), xi ∈ Rd, y ∈ R.• 統計モデル:y = aTϕ(x) + ε
カーネル回帰分析� �
1. カーネル関数 k(x,x′) = ϕ(x)Tϕ(x′) を定義する.
2. グラム行列 K, Kij = k(xi,xj), i, j = 1, . . . , n を計算.
3. K2β = Ky を β について解く.
4. 回帰関数 f(x) =n∑
i=1
k(x,xi)βi
� �15/96
以下は同じ推定:
• モデルy = a1ϕ1(x) + · · ·+ aDϕD(x) + ε で最小2乗推定
• カーネル関数k(x,x′) = ϕ(x)Tϕ(x′) によるカーネル回帰� �
ϕ(x) ではなく k(x, x′) を使う理由?� �
16/96
カーネル回帰分析の特徴
k(x,x′) = ϕ(x)Tϕ(x′) だけから推定量が計算できる.
• 写像先 RD の次元が D =∞ でも,k(x,x′) が簡単に計算できることがある.
例:ガウシアンカーネル (後述)
• 1次式モデル y = aTx+ ε とほぼ同じ計算手順.表現力が大幅アップ!
17/96
カーネル関数の例: x ∈ Rd 7−→ ϕ(x) ∈ RD.
• 線形カーネル (Rのオプションは vanilladot):D = d
k(x,x′) = xTx′, (ϕ(x) = x)
統計モデル: y = aTϕ(x) + ε = aTx+ ε
18/96
• 多項式カーネル (polydot):D = (degree+d)!degree! d!
k(x,x′) = (1 + xTx′)degree, degree = 1, 2, 3, . . .
統計モデル:y = aTϕ(x) + ε.
ϕ(x):degree次以下のすべての単項式からなるベクトル.
d = 2, degree = 2のとき
ϕ(x) = (1,√2x1,√2x2, x
21, x
22,√2x1x2)
T .
ϕ(x)Tϕ(z) = 1 + 2x1z1 + 2x2z2 + x21z
21 + x2
2z22 + 2x1x2z1z2
= (1 + x1z1 + x2z2)2
19/96
• ガウシアンカーネル (rbfdot):D =∞
k(x,x′) = exp{−sigma · ∥x− x′∥2}, sigma > 0
d = 1, sigma = 1のとき:
ϕ(x) = (ϕ0(x), ϕ1(x), ϕ2(x), · · · ),
ϕj(x) =xje−x
2/2
√j!
, x ∈ R
20/96
• R によるグラム行列の生成
> # x: データ行列 (サイズ = サンプル数 * 次元)>> # 多項式カーネル(degree=2)> K <- kernelMatrix(polydot(degree=2),x)>> # ガウシアンカーネル(sigma=3)> K <- kernelMatrix(rbfdot(sigma=3),x)
21/96
多項式カーネル回帰分析
• 初期設定
> library(kernlab) #ライブラリ読込> deg <- 6 #多項式カーネルの次数を設定> n <- 100 #データ数 n=100
• データの生成
> x <- matrix(runif(n,min=-3,max=3))> y <- sin(pi*x)/x+rnorm(n,sd=0.4)
• 多項式カーネル(polydot)のグラム行列の生成
> K <- kernelMatrix(polydot(degree=deg),x)
22/96
• 推定量の計算(2乗誤差の最小化)> #2乗誤差とその勾配> f <- function(z)sum((K%*%z-y)^2)> g <- function(z)as.vector(2*K%*%(K%*%z-y))> #2乗誤差の最小化> beta <- optim(rep(0,n),f,g,method="BFGS")$par
• 予測値の計算> px <- matrix(seq(-3,3,l=300)) #予測点> # px上でのyの予測値> py<-kernelMult(polydot(degree=deg),px,x,beta)
補足:f<-kernelMult(kernel,x1,x2,beta)はfi =
∑nj=1 k(x1i, x2j)βjを計算.
23/96
• R-code:2乗損失の最小化でパラメータ β を計算.(beta<-optim(· · · ) の行)• 一般化逆行列(MASS::ginv)でも計算可だが数値的に不安定.
多項式カーネルによる回帰分析の結果:> plot(x,y,lwd=3);lines(px,py,lwd=4,col=2) #プロット
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
−3 −2 −1 0 1 2 3
−10
12
3
degree=2
x
y
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
−3 −2 −1 0 1 2 3
−10
12
3
degree=6
x
y
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
−3 −2 −1 0 1 2 3
−10
12
3
degree=9
x
y
degree= 2 degree= 6 degree= 9
24/96
グラム行列の性質:非負定値性k(x,x′) = ϕ(x)Tϕ(x′), Φ = (ϕ(x1), . . . ,ϕ(xn)) とすると
K = ΦTΦ.
Kは対称非負定値行列
∀c ∈ Rn, cTKc ≥ 0, K ⪰ Oと書く.
cTKc = cTΦTΦc = ∥Φc∥2 ≥ 0
25/96
• k(x,x′) = tanh(1 + xTx′), tanh(z) =ex − e−x
ex + e−x
カーネル関数でない.In[1]:= Tanh[x]
In[4]:= Plot[Tanh[x], {x, $3, 3}]
Out[4]=!3 !2 !1 1 2 3
!1.0
!0.5
0.5
1.0
∗ x1 = (1, 0, . . . , 0)T ,x2 = (2, 0, . . . , 0) とすると
K =
(k(x1,x1) k(x1,x2)
k(x2,x1) k(x2,x2)
).=
(0.96403 0.99506
0.99506 0.99991
).
固有値は 1.97718,−0.0132481. 非負定値でない.26/96
— データへの過剰適合と正則化 —
27/96
データへの過剰適合(過学習)
• 単純なモデルでは対応できなさそうなデータの解析−→ 自由度の大きなモデルを使う.• モデルの自由度が大きすぎてもうまくいかない.
自由度:小 自由度:中 自由度:大
●
●
●
●
●
● ●
●
●
●
●
●●
●
●●
● ●
●
●
● ●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
−5 0 5
−0.5
0.0
0.5
1.0
1.5
x
y
●
●
●
●
●
● ●
●
●
●
●
●●
●
●●
● ●
●
●
● ●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
−5 0 5
−0.
50.
00.
51.
01.
5
x
y
●
●
●
●
●
● ●
●
●
●
●
●●
●
●●
● ●
●
●
● ●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
−5 0 5
−0.
50.
00.
51.
01.
5
x
y
28/96
正則化:モデルの自由度を調整� �考え方:自由度の大きいモデル + パラメータを適切に制約� �
データ : {(x1, y1), . . . , (xn, yn)}
線形回帰モデル : y = aTϕ(x) + b+ ε
⇐⇒ y =n∑
j=1
βjk(xj,x) + b+ ε, a =n∑
j=1
βjϕ(xj)
正則化:∥a∥2 = ∥∑n
j=1 βjϕ(xj)∥2 の大きさを制約する.
∥a∥2 =∑i,j
βiβjϕ(xi)Tϕ(xi) =
∑i,j
βiβjk(xi,xj)
29/96
正則化パラメータ λ > 0.� �
minβ, b
n∑i=1
{yi −
( n∑j=1
βjk(xj,xi) + b
)}2
+ λ∑i,j
βiβjk(xi,xj)
正則化項
=⇒ 最適解 β1, . . . , βn, b. f(x) =n∑
j=1
βjk(xj,x) + b
� �
ベクトル・行列で表すと
minβ,b∥y − (Kβ + b1)∥2 + λβTKβ
30/96
λ に対してうまく r を選ぶ:大きい λ ⇔小さい r
損失(2乗誤差)
正則化
!a!2 " r2
!a!2 " R2
31/96
正則化パラメータ λ > 0.
λ:大 λ:中 λ:小
●
●●
●
●●●
●
●●●●
●●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
1900 1920 1940 1960 1980 2000
13.5
14.0
14.5
15.0
15.5
16.0
16.5
lambda=10000
Year
Tem
pera
ture
●
●●
●
●●●
●
●●●●
●●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
1900 1920 1940 1960 1980 2000
13.5
14.0
14.5
15.0
15.5
16.0
16.5
lambda=1
Year
Tem
pera
ture
●
●●
●
●●●
●
●●●●
●●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●●
●
●
●
●
●
●
●●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
1900 1920 1940 1960 1980 2000
13.5
14.0
14.5
15.0
15.5
16.0
16.5
lambda=1e−05
Year
Tem
pera
ture
小さい ←− モデル自由度(表現力) −→ 大きい
32/96
• 極値条件 (凸最適化なので大域解)
minβ,b∥y −Kβ − b1∥2 + λβTKβ
=⇒
(1 K + λI
n 1TK
)(b
β
)=
(y
1Ty
), Kij = k(xi,xj),
f(x) =∑n
i=1 βik(xi,x) + b
• カーネル関数 k(x,x′) だけから計算できる.(ϕ(x) は単体では現れない)
33/96
正則化付きカーネル回帰(Rcode-kernelRegression.r)
• 初期設定
> library(kernlab) # パッケージ読込> sig <- 3; l <- 1; # パラメータ: sigma, λ> n <- 100 # データ生成:データ数 n=100> x <- matrix(runif(n,min=-4,max=4))> y <- sin(pi*x)/x + rnorm(n,sd=0.5)
• ガウシアンカーネル(rbfdot)のグラム行列
> K <- kernelMatrix(rbfdot(sigma=sig),x)
34/96
• 推定量の計算:2乗誤差最小 [optim()関数]
> f <- function(z){w <- z[-(n+1)];+ (sum((cbind(K,1)%*%z-y)^2)+l*w%*%K%*%w)/2}> g <- function(z){w <- z[-(n+1)];+ rbind(K,1)%*%(cbind(K,1)%*%z-y)+c(l*K%*%w,0)}> s <- optim(rep(0,n+1),f,g,method="BFGS")$par> beta <- s[1:n]; b <- s[n+1]
35/96
• 予測
> px <- seq(-4,4,l=100) # 予測点> py <- kernelMult(rbfdot(sigma=sig),px,x,beta)+b> plot(x,y);lines(px,py,lwd=4,col=2) #プロット
データ点と推定結果のプロット• バンド幅パラメータ:sigma = 3
• 正則化パラメータ:λ = 1
●
●●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
−4 −2 0 2 4
−10
12
34
x
y
36/96
モデル選択:学習誤差と予測誤差
• 学習データ:(x1, y1), . . . , (xn, yn) ∼i.i.d. P
• 学習データから推定された回帰関数 f(x)
学習誤差 :1
n
n∑i=1
(f(xi)− yi
)2(データから計算可能)
予測誤差 : E[(f(x)− y
)2](データだけでは分からない)
37/96
多項式回帰
4 6 8 10 12
0.00
0.02
0.04
0.06
model complexity
erro
r
training errorprediction error
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
−3 −2 −1 0 1 2 3
−0.
20.
20.
40.
60.
81.
0
x
y
degree=6degree=13
過学習� �
• 多項式の次数高いと・・・∗ 学習誤差は小さくなる∗ 予測誤差は大きくなる
−→ モデル選択:モデルの自由度を適切に設定.� �38/96
カーネル法におけるモデル選択
• カーネル回帰 f(x) の自由度を調整するパラメータ:
∗ カーネルパラメータ:kernel par
・多項式カーネルの degree
・ガウシアンカーネルの sigma
∗ 正則化パラメータ:λ > 0, loss(β) + λβTKβ
• これらを適切に定める.
39/96
モデルパラメータ推定の方針� �
• いろいろな mpar = (kernel par, λ) について・・・
∗ mpar に対する回帰関数:fmpar(x)
∗ データから fmpar(x) の予測誤差を推定−→ empar
• emparを最小にするモデルパラメータmparを選択.� �
emparの計算法:(K重)交差検証法
40/96
K重交差検証法 (K-fold cross validation)
• データをK個のグループに分割
推定 予測
推定 予測 推定
推定予測
(x1, y1) (x2, y2) · · · (xn, yn)⇒ error1
⇒ error2
⇒ errorK
D(1)
D(2) D(2)
D(K)
• 予測誤差の推定値 empar:error1, . . . , errorK の平均.
41/96
モデルパラメータmparをもつ回帰関数に対するK-CV� �
1. データ D = {(x1, y1), . . . , (xn, yn)} をほぼ同じサイズのK個のグループ D1, . . . ,DKに分割.D(k) を以下のように定める.
Di ∩ Dj = ∅ (i = j), ∪Ki=1Di = D, D(k) := D \ Dk = ∪i=kDi.
2. ℓ = 1, . . . ,K に対して以下を繰り返す.(a) D(ℓ) を用いてモデルパラメータ mpar の回帰関数を学習:fℓ(x)
(b) Dℓ に対する fℓ(x) の誤差を eℓ とする.
eℓ :=1
|Dℓ|∑
(x,y)∈Dℓ
(y − fℓ(x))2(推定に使っていないデータの予測)
3. 出力:予測誤差の推定値 empar =1
K
K∑ℓ=1
eℓ.� �
42/96
関数:Rcode-cv KR.r� �# ガウシアンカーネルのmpar=c(sigma,lambda)の選択cv_KR <- function(x,y,cvK=5,mpar=c(1,1)){#デフォルト値設定sig <- mpar[1]; l <- mpar[2]; n <- nrow(x);# データ分割idx <- sample(rep(1:cvK,ceiling(n/cvK))[1:n]);err <- c()for (i in 1:cvK){ # e_1,...,e_K の計算# 推定用データxa <- x[i!=idx,,drop=F];ya<-y[i!=idx,,drop=F]# 予測用データxb <- x[i==idx,,drop=F];yb<-y[i==idx,,drop=F]# グラム行列K <- kernelMatrix(rbfdot(sigma=sig),xa)extK <- rbind(cbind(rep(1,n),K+diag(lambda,n)),c(n,rowSums(K)))exty <- c(y,sum(y))# 推定量を求めるpar <- solve(extK, exty)b <- par[1]; beta <- par[-1]py <- kernelMult(rbfdot(sigma=sig),xb,xa,beta)+berr <- c(err,mean((yb-py)^2))}
mean(err)} #出力 e_mpar (e_1,...,e_Kの平均)� �
43/96
交差検証カーネル回帰
• 初期化
> library(kernlab) # パッケージ読込> source(’Rcode-cv_KR.r’) # 関数読込> n <- 100 # データ生成> x <- matrix(runif(n,min=-4,max=4))> y <- sin(pi*x)/x + rnorm(n,sd=0.5)
• モデルパラメータの候補の設定: λ = 1と固定.およそ sigma·∥xi − xj∥2 ≈ 2−10 ∼ 210 の範囲でsigmaを選ぶ.
> cvK <- 5 # 5重-交差検証> sig_list <- 2^(seq(-10,10))/median(dist(x))^2> mpar_candidate <- cbind(sig_list,1) # モデルパラメータ
44/96
• モデルパラメータの選択
> cv <- c()> for(i in 1:nrow(mpar_candidate))+ cv <- c(cv, cv_KR(x,y,cvK,mpar_candidate[i,]))> mpar_candidate[which.min(cv),]sig_list l
2.533719 1.000000 # 最適なモデルパラメータ(sigma,λ)
45/96
• empar のプロット
> plot(sig_list,cv,log=’x’)
予測誤差の推定値 empar.sigma ∼= 2.5で最小.
●●
●
● ● ●
●
●●
●
●
●
●
● ● ●
●
●
●
●
●
1e−04 1e−02 1e+00 1e+020.
20.
40.
60.
81.
0
sigma_list
cv
46/96
推定結果:ガウシアンカーネル
• カーネルパラメータ sigma:交差検証法で決定• 正則化パラメータ:λ = 1 と固定
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
−4 −2 0 2
−1
01
23
x
y
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
−4 −2 0 2
−1
01
23
x
y
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
−4 −2 0 2
−1
01
23
x
y
(sigma, λ) = (0.1, 1) (sigma, λ) = (2.5, 1) (sigma, λ) = (30, 1)
47/96
ヒューリスティクス
• K-交差検証法:計算コストが大きい.
∗ K回学習 =⇒ ひとつの mpar に対する empar が求まる.∗ モデルパラメータの選択: K回 × mparの候補数
• モデルパラメータが2次元以上の場合
∗ いくつかのパラメータ値を適当な値に固定.残りのパラメータを交差検証法で決める.
48/96
ガウシアンカーネルのsigmaの選び方ガウシアンカーネル:
k(x,x′) = exp{−sigma · ∥x− x′∥2}
• 数値計算の安定性のため,sigma · ∥xi − xj∥2 が「ほどほどの値」を取るようにする.
d2 := median{∥xi − xj∥2 | i < j} (中央値),
sigma = 1/d2
=⇒ sigma·∥xi − xj∥2 は 1 のまわりに分布.
49/96
kernlab::sigest() によるsigmaの選択
• データ生成
> library(kernlab) # sigestはkernlabにある> n <- 100 # データ生成> x <- matrix(runif(n,min=-4,max=4))
• sigest による sigma の推定
> sigest(x) # 配列を返す90% 50% 10%
0.1734559 0.6630795 15.8040286
∗ 上で示した sigma= 1/d2 は 50%点(0.6630795)に等しい.∗ sigestはサンプリングによる近似計算なので,厳密な中央値ではない.
50/96
交差検証法による λ の選択.sigmaはヒューリスティクスで選択.
• 初期設定,データ生成
> library(kernlab) # パッケージ読込> source(’Rcode-cv_KR.r’) # 関数読込> n <- 100 # データ生成> x <- matrix(runif(n,min=-4,max=4))> y <- sin(pi*x)/x + rnorm(n,sd=0.5)
51/96
• 5重交差検証による λ の決定
> s <- sigest(x)[2] # sigma のヒューリスティクス> lambdas <- n*2^seq(-20,0) # λの候補> mpar_candidate <- cbind(s,lambdas) #モデルパラメータの候補> cv <- c()> for(i in 1:nrow(mpar_candidate))+ cv <- c(cv, cv_KR(x,y,cvK=5,mpar_candidate[i,]))> mpar_candidate[which.min(cv),] # 最適なモデルパラメータ
s lambdas0.9842282 0.7812500
52/96
• プロット
> plot(lambdas,cv,log=’xy’)
1e-04 1e-02 1e+00 1e+02
0.4
0.6
0.8
1.0
lambdas
cv
• sigma = 0.984, λ = 0.781 が選択された.
53/96
推定結果• カーネルパラメータ sigma:ヒューリスティクス• 正則化パラメータ λ:いろいろ変える.
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
−4 −2 0 2 4
−10
12
3
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
−4 −2 0 2 4
−10
12
3
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
−4 −2 0 2 4
−10
12
3
(sigma, λ) = (0.98, 0.15) (sigma, λ) = (0.98, 0.78) (sigma, λ) = (0.98, 10)
54/96
2値判別:サポートベクトルマシン学習データ (x1, y1), . . . , (xn, yn) ∼i.i.d. P.
• 2値判別:y ∈ {+1,−1}
∗ 迷惑メールの判別,デジカメの顔検出.特定の疾患の診断.
• 多値判別: y ∈ Y = {1, 2, . . . , G}
∗ 文字認識,自然言語処理.
目的� �学習データと同じ分布にしたがう新たな入力 x に対して,ラベル y を予測する.� �
55/96
2値判別
• 入力:x ∈ X
• 出力ラベル:y ∈ {+1,−1}
-4 -2 0 2 4
-4-2
02
4
training data
x1
x2
-4 -2 0 2 4
-4-2
02
4
estimated decision boundary
x1
x2
56/96
仮説(判別器)のモデリング
• 判別関数 f : X −→ R
• 判別関数 f(x) から仮説 h(x) を構成
h(x) = sign(f(x))
• 符号関数:sign(z) = +1 (z > 0), −1 (z < 0), 0 (z = 0)
h(x) = 0 のとき:±1のどちらかに適当に割りふる.
57/96
判別関数と仮説のプロット
−2 −1 0 1 2 3
−2−1
01
2
x
f(x)
f(x)sign(f(x))
58/96
線形判別モデル基底関数 ϕ : X → RD を定める.ϕ(x) = (ϕ1(x), . . . , ϕD(x)).
判別関数の集合 F = { f(x) = ϕ(x)Ta+ b | b ∈ R, a ∈ RD },
判別器の集合 H = { sign(f(x)) | f(x) ∈ F }
データから,適切なパラメータa, b を推定する
−6 −4 −2 0 2 4
−4−2
02
4
59/96
方針:多くのデータ (xi, yi) に対して yi = sign(f(xi)) となるようなf(x) を求める.
• 損失を ℓ として
minf∈F
1
n
n∑i=1
ℓ(f(xi), yi) −→ f(x) −→ 判別器 sign(f(x))
• サポートベクトルマシン:
ℓ(f(x), y) = max{1− yf(x), 0}
ℓ(f(x), y) 小さい ⇐⇒ yif(xi) 大きい
60/96
カーネル化 & 正則化• データ:(x1, y1), . . . , (xn, yn), k(x,x
′) = ϕ(x)Tϕ(x′)
f(x) = ϕ(x)Ta+ b ⇐⇒ f(x) =n∑
j=1
βjk(xj,x) + b
• 高い表現力(ガウスカーネルなら∞次元)を正則化で調整.
-1.0 -0.5 0.0 0.5 1.0
-1.0
-0.5
0.0
0.5
1.0
-1.0 -0.5 0.0 0.5 1.0
-1.0
-0.5
0.0
0.5
1.0
線形カーネル ガウシアン・カーネル
61/96
� �
minβ,b
C
n
n∑i=1
ℓ
(yi
( n∑j=1
βjk(xj,xi) + b
))+
1
2
n∑i,j=1
βiβjk(xj,xi)
• 損失 ℓ(z) = max{1− z, 0}
• 最適解 β1, . . . , βn, b −→ 判別器 sign
(n∑
i=1
βik(xi,x) + b
)� �
62/96
• 線形カーネル (Rのオプションは vanilladot):
k(x,x′) = xTx′
• 多項式カーネル (polydot):
k(x,x′) = (1 + xTx′)degree, degree = 1, 2, 3, . . .
• ガウシアン・カーネル (rbfdot):
k(x,x′) = exp{−sigma · ∥x− x′∥2}, sigma > 0
63/96
-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
線形カーネル ガウシアン・カーネル
64/96
> #ソフトマージン・カーネルSVM(Rcode-kernelsvm.r)> library(kernlab); library(mlbench)#パッケージ読込> dat<-mlbench.spirals(300,cycles=1,sd=0.15)#データ> testdat<-mlbench.spirals(1000,cycles=1,sd=0.15)#テストデータ> #2次多項式カーネル (表示は適当に省略)> sv2<-ksvm(dat$x,dat$c,kernel="polydot",kpar=list(degree=2))> sv2 #学習結果の表示Hyperparameters : degree = 2 scale = 1 offset = 1Training error : 0.423333> mean(predict(sv2,testdat$x)!=testdat$c) #予測誤差の計算[1] 0.436> #3次多項式カーネル (表示は適当に省略)> sv3<-ksvm(dat$x,dat$c,kernel="polydot",kpar=list(degree=3))> sv3 #学習結果の表示Hyperparameters : degree = 3 scale = 1 offset = 1Training error : 0.166667> mean(predict(sv3,testdat$x)!=testdat$c) #予測誤差の計算[1] 0.175
65/96
• 正則化パラメータのデフォルト値: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
66/96
カーネルSVMのモデルパラメータの選択
• モデルパラメータ∗ 多項式カーネル:degree と C
∗ ガウシアン・カーネル:sigma と C
• 交差検証法で予測誤差を推定=⇒ 適切なモデルパラメータを決める.
∗ 評価の規準:
誤り確率 =1
n
n∑i=1
I[yi = h(xi)]
67/96
多項式判別器: {sign(f(x)) | f(x)は k 次以下の多項式}.予測誤差を小さくする次数 k は何か
poly: degree=2 poly: degree=5 poly: degree=8
68/96
ガウシアン・カーネルを用いて学習.sigma が大きいほど,複雑な判別境界を表現できる.
Gauss: sigma=0.1 Gauss: sigma=3 Gauss: sigma=20
69/96
Rcode-cv SVM.r(関数cv SVM:交差検証法で予測誤差を推定)� �#モデルパラメータ mpar に対して交差検証法で予測誤差を推定cv_SVM <- function(x,y,K=5,kernel="rbfdot",
mpar=list(kpar=list(sigma=1),C=1)){n <- nrow(x) #データ数idx <- sample(K,n,replace=TRUE) #データをランダムにK分割cv_error <- vector(length=K) #予測誤差を記憶する配列for (l in 1:K){
## 交互検証法で学習に使うデータcvx <- x[idx!=l,]; cvy <- y[idx!=l]sv <- ksvm(cvx,cvy,type="C-svc",kernel=kernel,
kpar=mpar$kpar,C=mpar$C)##学習に使っていないデータのラベルを予測pred <- predict(sv,x[idx==l,])cv_error[l] <- mean(pred != y[idx==l])#予測誤差の推定
}mean(cv_error) ## 出力値(予測値の平均)
}� �
70/96
補足� �交差検証法はksvmのcrossオプションで計算できる.> sv <- ksvm(x,y,cross=10,kernel=’rbfdot’,+ kpar=list(sigma=1),C=1)> cross(sv)� �
Rcode: 関数 svm cv で予測誤差を推定
> #Rcode-cv-kernelsvm-sigma.r> library(kernlab); library(mlbench) #パッケージ読込> source(’Rcode-cv_SVM.r’) #プログラム読込> #データ生成> dat<-mlbench.spirals(200,cycles=1.2,sd=0.16)> x<-dat$x; y <- dat$classes> cvK <- 5 # 5-重交差検証
71/96
> #交差検証法によるモデルパラメータの選択> #sigmaの候補> sigma_candidate<-seq(0.01,10,length=20)> pred_est<-c()> for(sigma in sigma_candidate){ # cvで予測誤差を推定+ mpar<-list(kpar=list(sigma=sigma),C=1)+ cv_est<-cv_SVM(x,y,K=10,kernel=’rbfdot’,mpar)+ pred_est<-c(pred_est,cv_est) }> #0.01~10の間で最適なsigma> opt_sigma<-sigma_candidate[which.min(pred_est)]
72/96
> opt_sigma #cvで選んだ最適なsigma[1] 5.267895> #sigmaに対する予測誤差のプロット> plot(sigma_candidate,pred_est,lwd=2)
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
0 5 10 15 20
0.25
0.30
0.35
0.40
0.45
sigma_candidate
pred
_est
73/96
判別器の学習結果
• 正則化パラメータ C = 1,交差検証法で最適な σ = 6.21
●● ● ●
●
●● ●●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
● ●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
gaussian kernel: sigma=0.01
●● ● ●
●
●● ●●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
● ●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
gaussian kernel: sigma=6.21
!! ! !
!
!! !!
!
!
!!
!!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!!
!
!
!
!
!!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
! !
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
! !!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
! !
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
gaussian kernel: sigma=20
σ = 0.01 σ = 6.21 σ = 20予測誤差:0.423 予測誤差:0.194 予測誤差:0.209
74/96
多値判別
• ラベルの種類が3つ以上: y ∈ Y = {1, 2, . . . , G}
∗ 数字の読み取り,アルファベットの読み取り,など
• 方法は大きく分けて2通り
アプローチ1: 複数の2値判別に分割,それぞれ学習,統合.アプローチ2: 多値判別の判別関数を直接学習
75/96
アプローチ1(2値判別法の組合せ)を解説する.アプローチ2と比較して・・・
• 利点:実装が簡単.すでにある2値判別法(SVMなど)を組み合わせるだけ.
• 欠点
∗ 理論的な精度保証が(あまり)ない∗ 各クラスのデータ数に偏りがあるとき予測精度が低い傾向.
76/96
• one-vs-one 法
• one-vs-all (one-vs-rest) 法
• 一般化:Error correcting output coding (ECOC)
77/96
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).� �
78/96
予測法:多数決� �
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)
� �
79/96
例: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 を返す )
80/96
• 予測:多数決による予測.図の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.
81/96
例:正規分布モデルLinear kernel Gaussian kernel
82/96
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 を得る.
83/96
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 ひとつもない ⇒ 予測ラベルが決まらない� �
84/96
例:one-vs-all法ラベル:● ● ●,残りのラベルを●でプロット.
training data black(1) vs rest
red(2) vs rest green(3) vs rest
X の予測ラベルは green.
85/96
誤り訂正出力符号化法(ECOC)
• 誤り訂正符号の考え方を応用
• one-vs-one,one-vs-all の一般化:
References:
Dietterich, Bakiri, Solving Multiclass Learning Problems via ErrorCorrecting Output Codes, Journal of Artificial Intelligence Research,vol. 2 Issue 1, pp. 263-286, 1994.
Allwein, Schapire, Singer, Reducing multiclass to binary: a unifyingapproach for margin classifiers, The Journal of Machine LearningResearch, vol. 1, pp. 113-141, 2001.
86/96
学習� �
• 各ラベル y に符号語 cy = (cy1, . . . , cyT ) ∈ {+1,−1, 0}T を対応させる.
例:
t (T = 5)label 1 2 3 4 51 (c1) −1 −1 −1 −1 02 (c2) +1 +1 −1 0 −13 (c3) 0 −1 +1 +1 −14 (c4) +1 0 −1 +1 +1
• t = 1, . . . , T に対して∗ (xi, yi) を 2値データ (xi, cyit) に変換 (i = 1, . . . , n).∗ cyit = 0 のデータのみ用いて,2値仮説 ht(x) を学習.� �
87/96
予測� �
• 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))
(この定義だと距離の公理は満たさないが,便宜上距離とよぶ)� �
88/96
符号語cy (例:ラベル数4)
• one-vs-one:
tlabel 1 2 3 4 5 61 (c1) +1 +1 +1 0 0 02 (c2) −1 0 0 +1 +1 03 (c3) 0 −1 0 −1 0 +14 (c4) 0 0 −1 0 −1 −1
∗ 各列に対応して,元データを2値に変換して学習.例:t = 1 ではラベル 1, 2 のデータのみ使用.∗ ハミング距離で予測:score(y)と同じ:cytが0でない要素どうしを比較
89/96
• one-vs-all:仮説による予測
tlabel 1 2 3 41 (c1) +1 −1 −1 −12 (c2) −1 +1 −1 −13 (c3) −1 −1 +1 −14 (c4) −1 −1 −1 +1
90/96
符号間の最小距離:ρ = 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で測る.
91/96
� �
H(x)の学習誤差 L(H) =1
n
n∑i=1
I[H(xi) = yi]
について次式が成立:
L(H) ≤ 2T
ρ· 1T
T∑t=1
L(ht),
ρ
T(符号間距離) 大きい =⇒ 学習誤差 小さい
� �
92/96
L(H)の評価式の証明: H(xi) = yi のとき,
∃y′ = yi,T∑
t=1
d(cyit, ht(xi)) ≥T∑
t=1
d(cy′t, ht(xi)) (1)
符号語 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.
93/96
(1)より
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)
94/96
例: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 なら意味ある結果.
95/96
• リード・ソロモン符号 (線形符号の一種):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なら意味ある結果.
96/96