Skip to main content
PRML輪読会 第7回 made	
  by	
  C.M.Bishop	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  modified	
  by	
  T.Sakaki	
  

PATTERN	
  RECOGNITION	
  	
  
AND	
  MACHINE	
  LEARNING	
  
CHAPTER	
  3:	
  LINEAR	
  MODELS	
  FOR	
  REGRESSION	
  
3章 線形回帰モデル	
教師あり学習-­‐回帰問題について	
  

	
  回帰問題=所与: N個の観測値          と目標値	
  
    →新しいxに対するtの値を予測する	
  

目的:	
  
  過学習を避けて学習する	
  

方針:	
  
  尤度関数を求め、最尤推定によってパラメータを決定する	
  
    対数尤度法	
  
  誤差関数と正則化項の和を最小化する	
  
  ベイズ的に取り扱う(事前分布・事後分布を考える)	
  
3.2 バイアスーバリアンス分解	
正則化係数λの値をどのように決定するか?	
  
    正則化係数λ→大:複雑なモデル	
バイアス bias	
  
 予測値の平均が、理想的な回帰関数 h(x)からどのくらい離
れているか?	
  
バリアンス variance	
  
 各データ集合に対する解が、特定のデータ集合に関する期
待値の周りでどのくらい変動しているか?	
  
  =データ集合の選び方の敏感さ	
  
  =各予測値がどれくらいバラけているか?	
  
3.2 バイアスーバリアンス分解	
サンプル	
  

・N=25点、100種類のデータを生成	
  
・各訓練データに付いて、正則化誤差関数を	
  
最小化	
  
・24個のガウス基底関数をフィッティング
3.2 バイアスーバリアンス分解	
  
N=25点、100種類のデータを生成	
  

variance小	

bias	
  大
3.2 バイアスーバリアンス分解	
  
N=25点、100種類のデータを生成	
  

variance大	

bias小
3.2 バイアスーバリアンス分解	
  
N=25点、100種類のデータを生成	
  

variance	
  中	

bias	
  中
3.2 バイアスーバリアンス分解	
•xが与えられたときのtの推定値:y(x)	
  
•損失関数:L(t,y(x))	
  
•損失の期待値:E[L]を最小化するt	
  の推定値=Et[t|x]	
  
3.2 バイアスーバリアンス分解	
  
条件付き期待値(回帰関数)	
  

期待二乗損失	
  

予測値と学習データからの期
待値との差	
P.46の式1.90及びP.46の末尾	
  
P.47の冒頭の記述参照	

学習データからの期待値と目標
変数との差	
  
→ノイズ	
  
→達成可能な最小の期待損失	
  
3.2 バイアスーバリアンス分解	
  
有限個のデータからは理想的な回帰関数h(x)	
  
を求めることは困難	
  
→第一項=データ集合から求められる予測関
数と回帰関数の期待二乗誤差を考える	
  
3.2 バイアスーバリアンス分解	
  
y(x;D)とh(x)の期待二乗誤差	
  

予測値の平均が、理想的な	
  
回帰関数 h(x)からどのくらい
離れているか?	

各データ集合に対する解が、
特定のデータ集合に関する期
待値の周りでどのくらい変動し
ているか?
3.2 バイアスーバリアンス分解	
  
期待損失=	

€

(bias ) 2 + var iance + noise
€

3.2 バイアスーバリアンス分解	
  
バイアスとバリアンスのトレードオフについて	
1 N
(bias ) 2 = ∑ y (x n ) − h (x n )
N n =1
	
 	
 

{

正規化係数λ→大: 	
  
 パラメータが0に近づく	
  
€
 bias→大 variance→小	
正規化係数λ→小: 	
  
 ノイズにover-­‐fiKng	
  
 bias→小 variance→大	

}

2

1 N 1 L (l )
var iance = ∑ ∑ y (x n ) − y (x n )
N n =1 L l
	
 	
 

{

}

2
3.3 ベイズ線形回帰	
線形回帰問題	
  
  問題にあわせて、モデルの複雑さを適切に決めることが
重要	
  
 → どうやって決定するか?	
  
 → 線形回帰モデルをベイズ的取り扱う	
  
     =事前分布・事後分布を扱う	
  

 利点:・過学習の回避	
  
     ・訓練データからモデルの複雑さを	
  
	
   	
    自動的に決定
3.3 ベイズ線形回帰	
  
・目標変数:t 入力変数:x モデルパラメータ:w	
  	
  
・パラメータの事前分布を導入して、事後分布を求めて、パラメータを推定	
  
・尤度関数	
  
・wの共役事前分布	
  

・wの事後分布	
  
3.3 ベイズ線形回帰	
・事後確率はガウス分布	
  
・最頻値と期待値は一致するので、事後確率を最大	
  
・無限に広い事前分布         を考えたとき	
  

事後分布の平均は最尤推定による値 (3.15)	
  と一致
3.3 ベイズ線形回帰	
  
事前分布及び事後分布
事前分布	
事後分布	
α:初期分布の精度	
  
β:ガウスノイズの精度
3.3 ベイズ線形回帰	
・対数尤度関数	
β N
ln p (w |t) = − ∑ tn − w T φ (x n )
2 n =1
	
 	
 

{

λ=

€

}

2

α T
− w w + const
2

α
β

事後分布をwについて最大化することは,	
P.142	
  
€
二乗和誤差関数と二次正則化項の和の最小化と等価	
 式3.27
具体例:	
y(
目標関数	
  
	
 	
 x ,a) = a0 + a1x (a0 = −0.3,a1 = 0.5)
2
パラメータは固定	
  
α = 2.0, β = (1/0.2) = 25
€

データ点を観測する毎に	
  
€
 現在の事後分布→次の時点の事前分布	
  
のように逐次処理
3.3 ベイズ線形回帰	
  
データ観測前	
  

事前分布	
  

データ空間	
  
3.3 ベイズ線形回帰	
  
データを1つ観測	
  

尤度関数	
  

事後分布	
  

データ空間	
  
3.3 ベイズ線形回帰	
  
データを2つ観測	
  

尤度関数	
  

事後分布	
  

データ空間	
  
3.3 ベイズ線形回帰	
  
データを20個観測	
  

尤度関数	
  

事後分布	
  

データ空間	
  
3.3.2 予測分布	
  
新たなデータxが得られる度に、逐次的にtを
予測したい!	
  
→予測分布を考える	
  

ノイズ	

wの不確かさ
3.3.2 予測分布	
予測分布の導出	
目標変数の条件付き分布	

 
 
T 
p (t x	
  , β) = Ν ty (x	
  ), β −1 = Ν t w	
 φ (x	
 , β −1
,w	
 
,w	
 
)
	
 	
 

(

)

(

重みの事後分布	

€



p w	
  = Ν w	
  N ,S N
t	
 
m
	
 	
 

( )

(

)

P.151	
  式(3.49)	
  

下記の予測分布を求めたい	

€

€


p t x	
  , α, β
,t	
 
	
 	
 

(

)

P.155	
  式(3.58)	
  

)

P.138 式(3.8)	
  
3.3.2 予測分布	
用いる式	
 p(x ) = Ν(x µ,Λ−1 )
	
 	
 

(

(
)

p (y x ) = Ν y Ax + b, L−1
	
 	
 
−1 T

)

の時	

p (y ) = Ν x Aµ + b, L + AΛ A
	
 	
 
€
€

x
t	
 
,t	
 
	
 	
 →w	
  ,y →t x	
  α, β


 
T  −1
€
p w	
  = Ν (w	
  N ,S N )
t	
 
m
p (t x	
  , α, β) = Ν t w	
 φ (x	
 , β
,w	
 
)
	
 	
 
	
 	
 
−1

( )

T
µ → m N ,Λ−1 →S N , x →w	
 , A → φ (x ), L−1 → β
	
 	
 

T
T
−1
p t x	
  , α, β = Ν t €N φ (x ), β +φ (x ) S N φ (x )
,t	
 
m
€

€

(
	
 	
 

€

€

)

(

(

)

)

P.155	
  式(3.58)	
  
3.3.2 予測分布	
  
事例: Sin関数に対し、9個のガウス基底関数を用い
て回帰	
  
 データ数1個目	
  

予測分散	

事後分布から得られた関数
3.3.2 予測分布	
  
事例: Sin関数に対し、9個のガウス基底関数を用い
て回帰	
  
 データ数2個目	
  

予測分散	

事後分布から得られた関数
3.3.2 予測分布	
  
事例: Sin関数に対し、9個のガウス基底関数を用い
て回帰	
  
 データ数4個目	
  

予測分散	

事後分布から得られた関数
3.3.2 予測分布	
  
事例: Sin関数に対し、9個のガウス基底関数を用い
て回帰	
  
 データ数25個目	
  

予測分散	

事後分布から得られた関数
3.4 等価カーネル	
訓練データの目標値の線形結合により予測を行う	
  
=線形平滑器のパラメータ
等価カーネル	
  
予測値は下記の式で表される	
  

平滑化行列	
  
等価カーネル	
  	
  

予測値 tnによる訓練データの重みづけ合計	
  
等価カーネル	
  

・重みtn	
  はx	
  と xnの距離に依存	
  
・xとxn	
  が近いほど大きな重みとする	
  
等価カーネル	
  
k(x、x )の例: x=0の場合のx’をプロット	
  
基底関数が局所的でなくても	
  
等価カーネルはx’に対して局所的な関数になる	
  

Polynomial	
  

Sigmoidal	
  
等価カーネル	
  
○等価カーネルは共分散関数:	
  	
  

6章のガウシアンプロセスを用いる事で、基底
関数を用いず、また直接カーネル関数を定
義する必要がない	
  
近傍点での相関が強く、より離れた点の組では相関が小さい	
局所的なカーネルを定義することでxが予測できる
等価カーネル	
  
○全てのデータ点xに対して、カーネル関数の合計は1	
  

※ただし、いくつかのxに対するカーネル関数の値は負となる	
  
○他のカーネル関数と同様、等価カーネルは内積で表現可
能	
  
Rで実装	
M =9
α =2
β = 25
L = 30
s
	
 	
 = 1

基底関数の数	

データ点の数	

xlist
	
 	
 

0 1を25等分した	
  
等差数列	
  

tlist
	
 	
 

xlistの値をSin関数に
代入し、さらに誤差を
与えたデータセットを
生成	
  

€
€

M	
  <-­‐	
  9	
  	
  	
  	
  	
  	
  	
  	
  #	
  number	
  of	
  basis	
  func]ons	
  
alpha	
  <-­‐	
  2	
  	
  	
  	
  #	
  hyper	
  parameter	
  
beta	
  <-­‐	
  25	
  	
  	
  	
  #	
  hyper	
  parameter(precision)	
  
LaKce	
  <-­‐	
  30	
  #	
  number	
  of	
  graph's	
  laKce	
  
	
  s	
  <-­‐	
  0.1	
  
#	
  training	
  data	
  
xlist	
  <-­‐	
  seq(0,	
  1,	
  length=25)	
  
tlist	
  <-­‐	
  sin(2*pi*xlist)+rnorm(length(xlist),	
  sd=0.2)	
  
D0	
  <-­‐	
  data.frame(x=xlist,	
  t=tlist)	
  

€

引用元:hcp://d.hatena.ne.jp/n_shuyo/20090709
Rで実装	
⎧
⎪ x − µj
φj (x ) = exp⎨ −
2s 2
⎪
⎩
	
 	
 
⎛φ 0  φ M −1 ⎞
⎜
⎟
Φ = ⎜  
 ⎟
⎜
⎟
	
 	
  ⎝φ 0  φ M −1 ⎠

(

€

)

2

⎫
⎪
⎬
⎪
⎭

−1
S N = αI + βΦT Φ

€

€

T
mN
	
 	
  = βS N Φ t

y = φ T (x ) m N
	
 	
 
⎛ m T φ (x ),
⎞
N
⎟
Ν⎜t −1
⎜ β + φ (x )T S φ (x )⎟
⎠
N
€ 	
 	
 ⎝

€

predic]ve	
  <-­‐	
  func]on(D)	
  {	
  
	
  	
  	
  	
  #	
  design	
  matrix	
  
	
  	
  	
  	
  phi	
  <-­‐	
  func]on(x)	
  sapply(x,func]on(x)exp(-­‐(x-­‐seq(0,1,length=9))^2/(2*s*s)))	
  
	
  	
  	
  	
  PHI	
  <-­‐	
  t(phi(D$x))	
  
	
  	
  	
  	
  #	
  covariance	
  matrix	
  &	
  means	
  
	
  	
  	
  	
  S_N_inv	
  <-­‐	
  alpha	
  *	
  diag(M)	
  +	
  beta	
  *	
  t(PHI)	
  %*%	
  PHI	
  
	
  	
  	
  	
  S_N	
  <-­‐	
  solve(S_N_inv)	
  	
  
	
  	
  	
  m_N	
  <-­‐	
  beta	
  *	
  S_N	
  %*%	
  t(PHI)	
  %*%	
  D$t	
  
	
  	
  	
  	
  #	
  regression	
  func]on	
  
	
  	
  	
  	
  y	
  <-­‐	
  func]on(x)	
  (t(phi(x))	
  %*%	
  m_N)	
  
	
  	
  	
  	
  plot(y,	
  xlim=c(0,1),	
  ylim=c(-­‐1.2,1.2))	
  
	
  	
  	
  	
  par(new=T)	
  
	
  	
  	
  	
  plot(D,	
  xlim=c(0,1),	
  ylim=c(-­‐1.2,1.2),	
  ylab="")	
  
	
  	
  	
  	
  #	
  predic]ve	
  distribu]on	
  
	
  	
  	
  	
  var_N	
  <-­‐	
  func]on(x){	
  1/beta	
  +	
  (t(phi(x))	
  %*%	
  S_N	
  %*%	
  phi(x))[1]	
  }	
  
	
  	
  	
  	
  func]on(x,	
  t){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  mapply(func]on(x,	
  t)dnorm(t,	
  m=(t(m_N)	
  %*%	
  phi(x))[1],	
  s=var_N(x),	
  log=T),	
  x,	
  t)	
  
	
  	
  	
  	
  }	
  
}	
  

引用元:hcp://d.hatena.ne.jp/n_shuyo/20090709
Rで実装	

データ点1個で回帰	
データ点2個で回帰	
データ点4個で回帰	
全データ点25個で回帰	

draw_dist	
  <-­‐	
  func]on(p){	
  
	
  	
  	
  	
  x	
  <-­‐	
  seq(0,1,length=LaKce)	
  
	
  	
  	
  	
  t	
  <-­‐	
  seq(-­‐1.5,	
  1.5,	
  length=LaKce*2)	
  
	
  	
  	
  	
  z	
  <-­‐	
  outer(x,	
  t,	
  p)	
  
	
  	
  	
  	
  persp(x,	
  t,	
  z,	
  theta=0,	
  phi=60,	
  shade=0.4)	
  
}	
  
p	
  <-­‐	
  predic]ve(D0[sample(length(D0$x))[1:1],])	
  
draw_dist(p);	
  
p	
  <-­‐	
  predic]ve(D0[sample(length(D0$x))[1:2],])	
  
draw_dist(p);	
  
p	
  <-­‐	
  predic]ve(D0[sample(length(D0$x))[1:4],])	
  
draw_dist(p);	
  
p	
  <-­‐	
  predic]ve(D0)	
  	
  
draw_dist(p);	

引用元:hcp://d.hatena.ne.jp/n_shuyo/20090709