続わかりやすいパターン認識11章(11.1 - 11.4)
Click here to load reader
-
Upload
tera-monagi -
Category
Engineering
-
view
763 -
download
1
Transcript of 続わかりやすいパターン認識11章(11.1 - 11.4)
続・わかりやすい
パターン認識
@teramonagi
第11章 (11.1-11.4) ノンパラメトリックベイズモデル
誰や?
俺や
• ID: @teramonagi
•職種:データ分析おじさん
•業務:ブカーの育成&会議&Code
•言語:/R/F#/Python/C++/Ruby/
•特技:早起き・根回し
3
優秀な新人怖い
11.1: 分割の確率モデル
4
これまでのクラスタリング
• 9-10章で扱ったクラスタリング手法
–混合正規分布のパラメータ推定
–K-Means法
–凸クラスタリング法
• これらはクラスタ構造のモデル化が欠如
• クラスタ構造をモデリングし、クラスタリング実行中に最適なクラスタ数が自動決定される手法が欲しい
5
ノンパラメトリックベイズモデル
• そんな時のためのノンパラメトリックベイズ
• (今まで)最尤推定 → ベイズ推定
• ベイズ推定に基づきクラスタリング構造も事前分布としてモデル化する
• 方法は大きく分けて2つ(次ページ)
• 定義
–パターン集合:
–クラスタ集合:
–クラスタのパラメータ:
6
クラスタリング法1
•パターンの所属クラスタsおよび、そのクラスタのパラメータθの双方を決定する
7
事後確率
MAP推定値
クラスタリング法2
•パターンの所属クラスタのみを決定する
•クラスタのパラメータθは不要なので積分消去(Marginal out)
8
事後確率
MAP推定値
解決すべき問題
• 問題1:クラスタの事前確率p(s)の設定
• 答:分割の確率モデルを用いる(11.2, 11.3)
• 問題2:事後分布p(s, θ|x), p(s|x)を最大化するための計算をどうするか
• 答:ギブスサンプリング(12.1)
9
※ここでは単一割り当てを仮定し、特にディリクレ過程を詳細に説明、多重割り当ての場合はベータベルヌーイ過程については(A.7)で
11.2: ホップの壺モデル
10
ホップの壺モデル
• Hoppe’s urn model
•壺に1個の黒玉と他の色の玉(色玉)が混在
•玉の重さ:黒玉(α)・他の色(1)
•次ページに示すルールに従って、壺から玉を出し入れする
11
ホップの壺モデル
1. 壺の中に黒玉が1個入ってる
2. 玉の重さに比例した確率で玉を1つ取りだす
3. If 玉色=黒→新色玉を1つ追加・黒玉戻す
4. Else その色と同じ玉を1つ追加
5. 2に戻る
12
ホップの壺モデル(例)
13
α/α
はじめ 黒玉選択 新色(赤)追加 ※壺中の数値は玉の選択確率
ホップの壺モデル(例)
14
黒玉選択
α/(1+α)
新色(黄)追加
1/(2+α)
黄玉選択
ホップの壺モデル(例)
15
同色追加 赤玉選択 同色追加
1/(3+α)
ホップの壺モデル(例)
16
赤玉選択 同色追加 黒玉選択
2/(4+α) α/(5+α)
ホップの壺モデル(例)
17
新色(緑)追加 おしまい
…となる確率
R:赤
Y:黄
G:緑
この例となる確率
18
上昇階乗:
色が入る順番を入れ替える
•色が入る順番を入れ替えて、確率を計算してみると…
•前の結果
19
確率一致!
イーウェンスの抽出公式
• 今の話の一般化
–確率は色の順番に非依存
–色玉の種類数とその個数のみに依存
20
第i色の色玉の個数n_i
イーウェンスの抽出公式 • 特徴1:交換可能性
–色玉の組み合わせの確率は、玉を入れる順番に非依存
• 特徴2:クラスタ数の非規定 –壺に入れられる色玉の種類は試行とともに増加
• 特徴3:クラスタ数の調整
–αの値大→色玉の種類増
–αの値小→色玉の種類減
21
11.3: 中華料理店過程
22
中華料理店過程
• Chinese Restaurant Process, CRP
•ホップの壺モデルの特徴を全て満たす(等価な)分割の確率モデル
•中華料理店の複数のテーブルに順次客が着席
•同テーブルの客を1つのまとまりと考える
23
中華料理店過程
• 最初の客は任意のテーブルに着席
• N番目以降の客
–既にn_i人着席しているテーブルiに確率n_i/(n-1+α)
–誰も着席していない最も番号の小さいテーブルに確率α/(n-1+α)
で着席
(nは自分も含めて数える!!!) 24
中華料理店過程(例)
•6番目の客のテーブル選択
25
テーブル
1
テーブル2
テーブル
3
1 2 3 4
5
3/(5+α) 2/(5+α) α/(5+α)
※↑は6番目の客が各テーブルを選択する確率
中華料理店過程(例) • 6人の客が順にテーブル1,2,2,1,1,3に着席する確率
26
テーブル
1
テーブル2
テーブル
3
1 2 3 4
5 6
中華料理店過程(例) • 6人の客が順にテーブル1,1,2,1,2,3に着席する確率
27
テーブル
1
テーブル2
テーブル
3
1 3 5 2
4 6
※順番を変えても着席確率は不変!
中華料理店過程の特徴 • 特徴1:交換可能性
–着席確率は客の到着順序に非依存
• 特徴2:クラスタ数の非規定 –着席しているテーブルの数は客の到来とともに増大する
• 特徴3:クラスタ数の調整
–αの値大→空席でないテーブルが増加
–αの値小→特定のテーブルに固まりやすい • これらの特徴はホップの壺モデルの特徴と一対一対応(客の着席⇔色玉の追加)
28
11.4: 事前確率のための確率モデル
29
クラスタリングと2つのモデルの関係
クラスタリング ホップの壺モデル CRP
k番目のパターン
壺に入れるk番目の玉
k番目の来店客
総パターン数: n 壺中の色玉の総数 来店客総数
クラスタ: ω_i 第i色 テーブルi
クラスタ数: c 色の種類数 使用テーブル数
ω_iに属するパターン数: n_i
壺中の第i色の玉の数
テーブルiに着席した客の数
30
テーブルへの分割方法とその生起確率
(n=4, α=2) (a)テーブル数c (b)テーブルの客数 客の分割方法 (d)生起確率
1 (4) (① ② ③ ④) 1/10
2
(2, 2) (① ②) (③ ④) 1/30
(① ③) (② ④) 1/30
(① ④) (② ③) 1/30
(3, 1)
(① ② ③) (④) 1/15
(① ② ④) (③) 1/15
(① ③ ④) (②) 1/15
(② ③ ④) (①) 1/15
3 (2, 1, 1)
(① ②) (③) (④) 1/15
(① ③) (②) (④) 1/15
(① ④) (②) (③) 1/15
(② ③) (①) (④) 1/15
(② ④) (①) (③) 1/15
(③ ④) (①) (②) 1/15
4 (1, 1, 1, 1) (① ② ③ ④) 2/15 31
演習問題11.1(2)の答え
• n人の客をn1, …, nc人ずつc個のテーブルに分割する方法の数N1(テーブルの区別なし)
•間違ってたら正直スマン
32
CRPからピットマン・ヨー過程へ
• CRP –既にn_i人着席しているテーブルiに確率
n_i/(n-1+α) –誰も着席していない最も番号の小さいテーブルに確率α/(n-1+α)
• ピットマン・ヨー過程
–既にn_i人着席しているテーブルiに確率(n_i-β)/(n-1+α)
–誰も着席していない最も番号の小さいテーブルに確率(α+cβ) /(n-1+α)
• β=0でCPRに帰着
33
CRPからピットマン・ヨー過程へ
• CRPでのテーブル数cの期待値
•ピットマン・ヨー過程でのテーブル数cの期待値(べき乗則)
34
ピットマン・ヨー過程
•使用テーブル数の期待値が、べき乗則に従う(y=ax^b)
•値の範囲が非常に広くなるロングテールな現象が現れる
•頑張ってシミュレーションしてみた
35
図11.5 CRPにおける使用テーブル数の変化
36
α=10
α=2
来客数n
使用テーブル数
c
図11.6 CRPにおけるテーブルと着席客数(n=1000人)
37 テーブル
各テーブルの客数
α=2・使用テーブル数=14 (テキストに無いケースなんだ、すまない)
図11.7 ピットマン・ヨー過程における使用テーブル数の変化
38 来客数n
使用テーブル数
c β=0.4
β=0.3
β=0.2
β=0(CRP)
図11.8 べき乗則に従うピットマン・ヨー過程(n=10^5人)
39 テーブル
各テーブルの客数
ピットマン・ヨー(β=0.8)
CPR(β=0)
直線
ピットマン・ヨー過程兼CPRのコード
40
#ピットマン・ヨー過程+CRPを生成する関数
pitman_yor <- function(size, alpha, beta)
{
table <- c(1)
x <- matrix(c(1,1), ncol=2)
for(n in seq_len(size))
{
denominator <- sum(table) + alpha
prob <- c(table - beta, alpha + (length(table)-1)*beta)/denominator
i <- sample(1:(length(table)+1), 1, prob=prob)
table[i] <- ifelse(is.na(table[i]), 0, table[i]) + 1
x <- rbind(x, c(n, length(table)))
}
list(x=x, table=sort(table, decreasing=TRUE))
}
ピットマン・ヨー過程兼CPRのコード
41
#図11.5
x10 <- pitman_yor(10^3, 10 , 0)
x2 <- pitman_yor(10^3, 2 , 0)
ylim <- range(x10$x[,2])
plot(x10$x, ylim=ylim)
par(new=T)
plot(x2$x, ylim=ylim)
#図11.6
x <- pitman_yor(10^3, 2 , 0)
barplot(x$table, names.arg=seq_len(length(x$table)))
ピットマン・ヨー過程兼CPRのコード
42
#図11.7
x4 <- pitman_yor(10^3, 2, 0.4)
x3 <- pitman_yor(10^3, 2, 0.3)
x2 <- pitman_yor(10^3, 2, 0.2)
x0 <- pitman_yor(10^3, 2, 0.0)
ylim <- range(x4$x[,2])
plot(x4$x, ylim=ylim)
par(new=T)
plot(x3$x, ylim=ylim)
par(new=T)
plot(x2$x, ylim=ylim)
par(new=T)
plot(x0$x, ylim=ylim)
ピットマン・ヨー過程兼CPRのコード
43
#図11.8
ylim <- range(c$table)
xlim <- range(seq_len(length(p$table)))
plot(seq_len(length(c$table)), c$table, log="xy", xlim=xlim, ylim=ylim)
par(new=T)
plot(seq_len(length(p$table)), p$table, log="xy", xlim=xlim, ylim=ylim)
おしまい
44