EMアルゴリズムについてざっくり解説 完全データの対数尤度を最大化なら簡単にできる という仮定が鍵。そのかたちにうまいこと持っていく。理論的な背景はPRML 9.4を参照Read less

EMアルゴリズムについてざっくり解説 完全データの対数尤度を最大化なら簡単にできる という仮定が鍵。そのかたちにうまいこと持っていく。理論的な背景はPRML 9.4を参照Read less
問題設定 R言語の書籍「Rによるモンテカルロ法入門」 のEMアルゴリズムに関連した「練習問題5.14」をpthonの練習がてらEMアルゴリズム構築までの数式もメモりながら解いてみたというお話。問題設定としては という混合分布(分布から確率、分布から確率でサンプリング)から個サンプリングした状況を考えて、このパラメーターをEMアルゴリズムで推定するというもの。機械学習の分野でいう所の「教師なし2クラス分類」に該当する(たぶん)。 グラフを使ってもうちょっとちゃんと説明しておくと、実際に観察された青い棒グラフで示されているデータは赤色のグラフで示されているからのサンプルなのか、それとも緑色のグラフで示されているからのサンプルなのかを識別するための閾値的な量になっているというパラメーターを推定してましょうと、そして、既存のデータはのどちらの分布から来た可能性が高いのかを判断しましょうとそういう問
正規化ガウス関数ネットワーク(Normalized Gaussian Networks)は正規分布による線形回帰ユニットを組み合わせて非線形回帰をするモデルだ。論文によってはほとんど同じモデルが確率的ニューラルネットワークと呼ばれていることもある。修士のときにこの論文(On-line EM Algorithm for the Normalized Gaussian Network http://www.mitpressjournals.org/doi/abs/10.1162/089976600300015853)のアルゴリズムを実装をしたことがある。このプログラムを再び使う機会があったので、ついでにASDFでパッケージ化してgithubに公開してみた。SBCL 1.0.34 (FreeBSD 8.0 Release/amd64)で動作確認している。 http://github.com/ma
オンラインEMアルゴリズムの論文を読んだ。というか結構前に読んでいたのだが、何かと忙しくて記事にするのを忘れていた。そろそろ私の頭からも消えかかっていたので忘れないうちにメモ。 Online EM for Unsupervised Models オンラインEM(OnlineEM)はEMアルゴリズムのオンライン版。オンラインアルゴリズムとはデータ全体をメモリに乗せずに、データを一件ずつ使ってパラメータを順次更新していく方法。なので一般にオンラインアルゴリズムではメモリ効率が良くなる。 しかしオンラインEMの場合は状況が異なる。EMアルゴリズムではパラメータ推定の際に十分統計量とよばれる値を保持しておけばよく、そもそもデータ全体を保持する必要がない。 では何が嬉しいのか、というとオンラインEMは通常のEMに比べて収束が早いという点。ただ論文の実験結果をみると、精度では本来のEMには及ばないみた
Rubyによる1次のガウス分布(正規分布)のメソッド † 引数は、値x、平均mu、分散sigma。返り値は確率密度。 include Math def gauss(x,mu,sigma) res1=1/Math.sqrt(2*Math::PI*sigma.to_f) res2=(x.to_f-mu.to_f)*(x.to_f-mu.to_f) res3=Math.exp(-res2.to_f/2*sigma.to_f) res1.to_f*res3.to_f end ↑ 1次のガウス分布に従う乱数の作成 † ボックス=ミュラー法を用いて、ガウス分布に従う乱数を発生させる。 引数は、発生させる総数n、ガウス分布の平均mu、ガウス分布の分散sigma。 返り値はなし。 include Math def gauss_rand(n,mu,sigma) j=0 while j < n a=rand(
PRML 9 章の混合ガウス分布の EM アルゴリズムを勉強のために実装してみた。(より本格的な実装と検証は id:n_shuyo さんのEM アルゴリズム実装(勉強用) - Mi manca qualche giovedi`?を参照のこと)。 今回初めての R だったので色々苦労したが、Rは良く出来ていてとても感心した。 真の分布を定義したのち伝承サンプリングでデータを生成し、Eステップ、Mステップを回して収束させた。 # データ生成 xx <- ancestralSampling(1000) # データを描いてみる plot(xx); # K=2 D=2 の混合ガウス分布を真の分布として定義。 start_pi <- list(rnorm(1, 0.5), rnorm(1, 0.5)); start_mu <- list(c(rnorm(1, 10), rnorm(1, 10)), c
最終変更者: 怡土順一, 最終変更リビジョン: 467, 最終変更日時: 2009-06-23 14:23:34 +0900 (火, 23 6月 2009) EM(Expectation-Maximization)アルゴリズムは,混合数が指定された混合ガウス分布に基づき,多変量の確率密度関数のパラメータを推定する. 特徴ベクトル{x1, x2,...,xN} の集合を考える. d次元ユークリッド空間のN個のベクトルは,混合ガウス分布を用いて以下のように表現される. ここでmは混合数,pk は,平均ak,共分散行列Sk, k-th分布の重みπkを持つ正規分布密度である. 混合数mとサンプル{xi, i=1..N}を与えることで,アルゴリズムはすべての混合分布パラメータ (すなわち, ak,Sk,πk) の最尤推定値(MLE) を以下のように推定する. EMアルゴリズムは繰り返し処理を行う.各
第1章 学習と確率 1.1 学習とは 1.2 確率変数と情報科学 1.2.1 離散値をとる確率変数 1.2.2 連続値をとる確率変数 1.2.3 確率変数の変換 1.2.4 平均と分散
この項の問題点 概要 EMアルゴリズムによるパラメータ推定 この項の問題点 まだ書きかけ。 概要 EMアルゴリズムによるパラメータ推定 EMアルゴリズムのは以下の形。 はcategorical distributionにしたがうとします。 (categorical distributionはBernoulli distributionの拡張です。) つまりと表し、を満たします。 Lagrange multiplierを用いて最大化を行い更新式を求めます。 を直接求めてもよいですが、単純にとなるように正規化すればよいです。 が多次元正規分布(multivariate normal distribution)の場合を考えます。 つまりGaussian mixtureの時です。 はベクトルで表現し、とはそれぞれ、平均ベクトルと共分散行列です。 平均と共分散、それぞれについて更新式を求めます。 微
これまで勾配法で最適解を求めてきましたが、今回はEMアルゴリズムを使って解を求めていきます。 EMアルゴリズムとは、E(Expectation)ステップとM(Maximization)ステップを繰り返していき、解を求めるアルゴリズムです。 今回は、ガウス混合分布をですとデータとしてパラメータを推定します。 まずデータとして、 の正規分布にのっとったデータを生成します。この時、としました。 この時の混合ガウス分布は となります。 今回求めたいのは、です。ただし、 という条件付きです。 基本的な流れは 1.平均・分散(今回は1に設定して省略)・混合係数を適当に設定 2.現在のパラメータから事後確率計算 *事後確率はデータ数×混合係数の数(パラメータの数?)だけ発生する。 3.事後確率を用いてパラメータ更新 4.対数尤度を計算し、変化が小さくなれば終了。対数尤度は となります。 本当は事後確率の
ぽんのブログ自分用の備忘録ブログです。書いてある内容、とくにソースは、後で自分で要点が分かるよう、かなり簡略化してます(というか、いい加減)。あまり信用しないように(汗 L 面 (面の数が L 個) のサイコロがあり、各目の出る確率が であるとします。ここに は、l番目の目の出る確率です。 このサイコロを M 回振った時、各目の出る回数が ( i 番目の目が出る回数が x_i )である確率は多項分布 で求められます。 が所与の時、パラメータ の最尤推定値は、こちらのPDFのようにして と求められます。 次にこの L 面サイコロを K 個用意します。k 番目のサイコロが選ばれる確率を とすれば、各目の出る回数が である確率は、混合多項分布 に従います。 ここで で、これはk番目の L 面サイコロの各目の出る確率で、 はこの k 番目のサイコロの l 番目の目の出る確率です。 今、K 個のサ
確率モデルが観測できない変数(潜在変数/隠れ変数)に依存する場合に最尤法を実施するためのアルゴリズム。非常に多くの応用に使え、変分ベイズ法などの基礎を成すのでとっても大事なアルゴリズム。 このアルゴリズムでは、現在のパラメータ()と観測変数()から得られる情報を使って、潜在変数()の条件付き確率()を求めるステップ(E-Step)と、観測変数の事後確率の期待値を最大化するフェーズ(M-Step)の二段階の処理を繰り返しながらパラメータを最適化する。 つまり、尤度関数()の最大化を一発で計算したいところなのだが、それは難しいので、今のを使って計算されるを利用して、尤度関数の期待値()の最大化という問題に置き換えている。実際には、最後の式を2つ目のを構成する各変数について偏微分して0になる値を探すなどを行って更新することになる。
自分の実装した「Numpyで混合ガウス分布のEMアルゴリズムを実装した」のコードを中谷さんの「EM アルゴリズム実装(勉強用) - Mi manca qualche giovedi`?」と照らしあわせて答え合わせしてみる。 まず、EMアルゴリズムってなんなのかって話を簡潔に。観測できている確率変数Xの他に観測できてない確率変数Zもある状況。それを表現するために自分で何か確率モデルを仮定する。その確率モデルのパラメータθを、観測されたデータXから考えてもっとも良さげなものを選びたい。コレが目的。数式で言えばp(X|θ)を最大にするθを求めたい。 但し残念なことにp(X | θ)の式は簡単には最大化できない(できるならEMアルゴリズム使わなくていい)とする。そして幸運なことに完全データの対数尤度 ln p(X, Z | θ)の最大化は簡単だと仮定する。PRMLの下巻p.166あたりの議論と持橋
最近忙しくて*1、PRML の予習が滞り中。 しかし、次の PRML 読書会に徒手空拳で行ったら、気持ちよく昇天してしまいそうなので、なんとか頑張って読んでみる。 EM アルゴリズムは何となくわかるが、変分ベイズがわからん…… というわけで、Old Faithful の混合正規分布での推論を K-means と EM と変分ベイズについて、Rで実装してみる。 K-means Old Faithful + K-means については、すでに 前回の記事でお試し済み。 その記事では、イテレーションを1行で書いてネタっぽくしてしまってたので、わかりやすく整理したのが以下のコード。 距離を取るところは少し変えて短くしてある。 # Old Faithful dataset を取得して正規化 data("faithful"); xx <- scale(faithful, apply(faithful,
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く