ノンパラメトリックベイズの初心者です。書籍「続わかりやすいパターン認識」の第12章のp260~261のクラスタリング法1のアルゴリズムの実装に関して何点か質問があります。この当たりについてご経験のある方のアドバイスをお願い致します。
(1)Step2ですが、p259の式(12.14)についてですが、これは式上段の現クラスタ数cの事後確率と式下段の新規での事後確率(1個)を計算して、その中でその値が一番大きいものをSk(所属クラスタ)として採用するという理解でいいでしょうか?
(2)Step3のθiを確率的に決定し、更新する方法がいまいちよく分かりません。これは(1)で所属クラスタが決定すれば、その情報に合わせて各クラスタごとにθiの値を計算し直せばいいと思うのですが、その場合p259の式(12.15)の各クラスタの事後分布を使ってどのような計算を行えばいいのかがよく分かりません。たとえば、θ1 = a, θ2 = b, p(θ1|xk∈ω1) = A, p(θ2|xk∈ω2) = Bが求まったとしてどのような計算を行えばいいのでしょうか?また、A、Bの値は実際にはp269の式(12.37)を計算することになりますが、これらの値は既に正規化されていると思っていいのでしょうか?(A/(A+B)のようなものを計算しなくてもよい。)
(3)p259の注釈(10)ですが、初回の1回目を実行してみたところ、所属クラスタは初期設定したものと同じという結果になってしまいました。この場合は、このクラスタはパターンの増減がなかったので、式(12.15)は計算しなくてよいのでしょうか?また、新規クラスタでの式(12.15)はパターン1個のみで行うと書いてありますが、これは具体的にどのような計算をすればいいのでしょうか?
(4)p267のウィッシャート分布Wですが、1回目の計算が終わった段階で、分母の2^(νd/2)はd=2で、p269の式(12.37)、式(12.42)によりμc=15 + 500=515でかなり大きな数になってしまうようなのですが、一般的に式(12.30)はそのまま計算できるものなのでしょうか?それとも比を取るなどして計算できるように(値が発散してしまわないように)工夫する必要があるのでしょうか?
たくさん書いてしまいましたが、ノンパラメトリックベイズは是非習得したいと思っているので、御経験のある方、是非ご教示願えればと思います。
No.1ベストアンサー
- 回答日時:
(1) 違います。
c個のクラスタ全てについて(12.14)式の上段の式を計算し、また、式下段の新規での事後確率(1個)を計算して、c+1個の確率の比に応じてskをどこにするかランダムに決めるということです。
(2) 質問の意味がよくわかりません。どこかで勘違いがあるような気がします。
Step 3は、(12.15)式によって定まるθiの事後分布から、ランダムにサンプリングして、それを新しい θi にする、ということです。
(3) 単純に、(12.15)式で、クラスタωi に属するxkが1個だけ、つまり、ωi = {xk} とすればいいわけで、具体的に書けば、
p(θi |{xk}) = G0(θi)*p(xk|θi) / ∫{G0(θi)*p(xk|θi)}dθi
です。
(4) 式(12.37)のθiの事後分布からサンプリングするのは簡単にはできないので、普通は、このサンプリングもMCMC(MH法など)を使ってやります。
基本的にMCMCであれば、確率密度関数の比させとれればよいわけで、正規化する必要はありません。したがって、式(12.30)の分母は計算する必要はありません。
また、基本的には、確率密度関数そのものではなくて、その対数をとったものを使って計算するので、ちょっとくらい、べき乗の数が大きくなっても問題なく計算できます。
No.4
- 回答日時:
そういえば、この質問ではなくて、前の凸クラスタリングに関する質問についてですが、
本で、線が太くなっているのは、併合したクラスタを(意図的に)太い線で描いているわけではなくて、
併合する前の各クラスタを全て同じ太さの線で描いてあるだけだと思いますよ。太い線のように見えているのはほ中心位置がほとんど同じ(併合するべき)複数のクラスタがあって、線が重なっているためです。
No.3
- 回答日時:
>(2)で私がよく分かっていないのは、(1)の計算結果で500個の所属クラスタが決まるので、その決まったクラスタ内でθ(μとΣ)を計算し直せばいいような気もする
そうですよ。まさに、それをやっているのがStep2です。ただし、ここでは、ギブスサンプリングをしているので、各xkの所属クラスタが決まっても、θは一意に決まるわけではなくて、事後分布からサンプリングしないといけません。下付きのθです。
>No.1さんのMH法も後でやってみようと思うのですが、
全体の枠組みは、本に書かれている通り、ギブスサンプリングですよ。
#1で、MH法を使うと書いたのは、(12.37)式で表されるθiの事後分布からのサンプリングについてです。もちろん、確率密度関数が明にわかっているわけで、MCMCを使わないでも、逆関数法などで直接サンプリングすることも原理的には不可能ではないですが、現実的には大変でしょう。
あるいは、(12.37)式の確率密度関数を、なんらかのサンプリングが簡単な確率分布(混合正規分布など)で近似して、そこからサンプリングする、というのも考えられます。
No.2
- 回答日時:
企業で統計を推進する立場の者です。
#1さんが完璧ともいえる回答をしていますが、
一点補足です。
ノンパラベイズは、主に離散値が対象なので、
MCMCの場合のサンプリングは、
メトロポリス・ヘイスティング(MH)よりはむしろ、
・チャイニーズ・レストラン・プロセス
・スティック・ブレーキング・プロセス
が使用されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 達成率の計算式を教えていただきたいです。 KPIでの不良削減達成率の計算方法を教えて下さい。 昨年度 3 2022/04/10 15:11
- HTML・CSS CSS上での計算を行うためのルールについて教えてください。 3 2022/08/15 14:43
- 統計学 統計検定2級の過去問について 1 2023/01/04 16:40
- 電気工事士 6.6kVケーブル単芯325sq-1.5kmの遮蔽銅テープ抵抗値は何Ω? 1 2023/05/02 21:06
- 数学 連立微分方程式の解き方について 7 2022/12/16 13:39
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- 統計学 こんな問題を使って教育するのは、文科省の方針ですか。 3 2022/06/17 09:14
- 統計学 t値の計算方法 1 2022/11/29 18:37
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規確率紙
-
疑似乱数の精度の違い
-
片対数グラフでの書き方について
-
標準偏差
-
統計学でいうRSD%とは何ですか。
-
今日数学のテストが返ってきて ...
-
ExcelでCVを計算するには
-
統計でいう「n」は、何の略な...
-
偏差値60の人と偏差値50の人が...
-
正規分布に従わないと標準偏差...
-
K回同期加算すると、雑音が1/K...
-
中学1.2年で5教科の合計点が350...
-
工程能力のN数補正について
-
サンプル数が1とサンプル数が...
-
標準偏差の3σ使い方
-
標準偏差バーをグラフに入れた...
-
統計学の問題です。 ある駅の売...
-
なぜ共分散はSxyで表すのですか...
-
高校偏差値67ってどのくらい字...
-
統計学における有効数字につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報
No.1さんのMH法も後でやってみようと思うのですが、ご指摘の、この書籍に出ているギブスサンプリングで実行した場合、1回目の繰り返し(c=上段=1、下段=1)の時にp259の式(12.14)の上段と下段の確率が500個ずつ計算できたとしてこの後、どんな計算を行えばよいのでしょうか?
(2)で私がよく分かっていないのは、(1)の計算結果で500個の所属クラスタが決まるので、その決まったクラスタ内でθ(μとΣ)を計算し直せばいいような気もするのですが、θも(1)と同様にp259の式(12.15)から確率的にサンプリングしてやらないといけないということなのでしょうか?後、確認ですが、ここで言っているθはこの書籍の下付き添字のθですよね。(上付き添字のθではない)
サンプリングの経験がほとんどないので教えていただきたいのですが、(1)の質問でp259の式(12.14)で、下段の積分の式はp269の式(12.35)で計算できるので、上段と下段の具体的な値が計算できるので、例えばc=1(上段が1個の場合)、
A (上段)= 9
B (下段)= 1
とした場合、
a(Aの確率) = A / (A+B) = 0.9
b (Bの確率)= B / (A+B) = 0.1
となるので、threshold = 0.9
として、pythonのnumpy.random.uniform()
で、0 ≦ x < 1 の値をランダムに発生させて、
x < threshold の場合、A
x > threshold の場合、B
という様に選択(3個以上も同様に処理する)していっていいのでしょうか?