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 + variance + noise
3.2 バイアスーバリアンス分解
バイアスとバリアンスのトレードオフについて
€
(bias)2 =1N
y(xn ) − h(xn ){ }2
n=1
N
∑
€
variance =1N
1L
y (l)(xn ) −y(xn ){ }2
l
L
∑n=1
N
∑
正規化係数λ→大: パラメータが0に近づく bias→大 variance→小
正規化係数λ→小: ノイズにover-‐fiKng bias→小 variance→大
3.3 ベイズ線形回帰
線形回帰問題 問題にあわせて、モデルの複雑さを適切に決めることが重要
→ どうやって決定するか? → 線形回帰モデルをベイズ的取り扱う =事前分布・事後分布を扱う
利点:・過学習の回避 ・訓練データからモデルの複雑さを 自動的に決定
3.3 ベイズ線形回帰
・目標変数:t 入力変数:x モデルパラメータ:w ・パラメータの事前分布を導入して、事後分布を求めて、パラメータを推定
・尤度関数
・wの共役事前分布
・wの事後分布
3.3 ベイズ線形回帰
・事後確率はガウス分布
・最頻値と期待値は一致するので、事後確率を最大
・無限に広い事前分布 を考えたとき
事後分布の平均は最尤推定による値 (3.15) と一致
3.3 ベイズ線形回帰
事前分布及び事後分布 事前分布
事後分布
α:初期分布の精度 β:ガウスノイズの精度
3.3 ベイズ線形回帰
・対数尤度関数
€
lnp w |t( ) = −β2
tn −wTφ xn( ){ }
2
n=1
N
∑ −α2wTw +const
€
λ =αβ
事後分布をwについて最大化することは, 二乗和誤差関数と二次正則化項の和の最小化と等価
P.142 式3.27
具体例:
目標関数 パラメータは固定
データ点を観測する毎に
現在の事後分布→次の時点の事前分布
のように逐次処理
€
y(x,a) = a0 +a1x(a0 = −0.3,a1 = 0.5)
€
α = 2.0,β = 1/0.2( )2 = 25
3.3 ベイズ線形回帰
データ観測前
事前分布 データ空間
3.3 ベイズ線形回帰
データを1つ観測
尤度関数 事後分布 データ空間
3.3 ベイズ線形回帰
データを2つ観測
尤度関数 事後分布 データ空間
3.3 ベイズ線形回帰
データを20個観測
尤度関数 事後分布 データ空間
3.3.2 予測分布
新たなデータxが得られる度に、逐次的にtを予測したい!
→予測分布を考える
ノイズ wの不確かさ
3.3.2 予測分布
予測分布の導出
€
p t x , w ,β( ) =Ν ty
x , w ( ),β−1( ) =Ν t
w Tφ x ( ),β−1( )
目標変数の条件付き分布
P.138 式(3.8)
重みの事後分布
€
p w t ( ) =Ν
w mN ,SN( ) P.151 式(3.49)
下記の予測分布を求めたい
€
p t x , t ,α,β( ) P.155 式(3.58)
3.3.2 予測分布
用いる式
€
p x( ) =Ν x µ,Λ−1( )
€
p y x( ) =Ν y Ax +b,L−1( )
€
p y( ) =Ν x Aµ +b,L−1 + AΛ−1AT( ) の時
€
x → w t ,y →t x ,
t α,β
€
p w t ( ) =Ν
w mN ,SN( )
€
p t x , w ,α,β( ) =Ν t
w Tφ x ( ),β−1( )
€
p t x , t ,α,β( ) =Ν t mN
T φ x( ),β−1 +φ x( )T SNφ x( )( ) P.155 式(3.58)
€
µ →mN ,Λ−1 →SN ,x →
w T ,A→φ x( ),L−1 →β
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 # 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
€
M = 9α = 2β = 25L = 30s =1
€
xlist 0~1を25等分した 等差数列
€
tlist
xlistの値をSin関数に代入し、さらに誤差を与えたデータセットを
生成
基底関数の数
データ点の数
Rで実装 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
€
φj x( ) = exp −x − µj( )2
2s2⎧ ⎨ ⎪
⎩ ⎪
⎫ ⎬ ⎪
⎭ ⎪
€
Φ =
φ0 φM −1 φ0 φM −1
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
€
SN−1 = αI + βΦTΦ
mN = βSNΦTt
€
y = φT x( )mN
€
Ν tmNT φ x( ),
β−1 + φ x( )TSNφ x( )
⎛
⎝ ⎜ ⎜
⎞
⎠ ⎟ ⎟
Rで実装
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
データ点1個で回帰
データ点2個で回帰
データ点4個で回帰
全データ点25個で回帰