与えられた式についてよくわからないので、誰かがEMアルゴリズムの簡単な数値例を提供できますか?4または5のデカルト座標を持つ本当に単純なもので十分です。
7872 次
1 に答える
5
これはどうですか:http: //en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/Expectation_Maximization_ (EM)#A_simple_example
また、1年前に(edit)Rで簡単な例を書いていましたが、残念ながらそれを見つけることができません。後でもう一度見つけてみます。
編集:ここにあります-
EM <-function() {{ ###ファイルを読み取り、必要な列を取得します dataFile <-read.csv( "wine.csv"、head = FALSE、sep = "、") sl <-dataFile [、2] #sw <-dataFile [、3] #pl <-dataFile [、3] #pw <-dataFile [、4] クラス<-dataFile[、5] N <-長さ(sl) pi1 <-0.5 ### 初期化 ### rand1 <-floor(runif(1)* N) rand2 <-floor(runif(1)* N) mu1 <-sl [rand1] mu2 <-sl [rand2] mean1 <-sum(sl)/ N sigma1 <-sum((sl-mean1)** 2)/ N sigma2 <-sigma1 print(mu1) print(mu2) print(sigma1) print(sigma2) COUNTLIM <-10 カウント<-1 prevmu1 <-0.0; prevmu2 <-0.0; prevsigma1 <-0.0; prevsigma2 <-0.0; ガンマ<-array(0、length(sl)) while(count <= COUNTLIM) {{ ガンマ<-pi1*dnorm(sl、mu2、sigma2)/((1-pi1)* dnorm(sl、mu1、sigma1)+ pi1 * dnorm(sl、mu2、sigma2)) mu1 <-sum((1-gamma)* sl)/ sum(1-gamma)
mu2 <-sum((gamma)* sl)/ sum(gamma)
sigma1 <-sum((1-gamma)*(sl-mu1)** 2)/ sum(1-gamma) sigma2 <-sum((gamma)*(sl --mu2)** 2)/ sum(gamma) pi1 <-sum(gamma)/ N print(c(mu1、mu2、sigma1、sigma2、pi1)) if(count == 1) {{ prevmu1 <-mu1; prevmu2 <-mu2; prevsigma1 <-sigma1; prevsigma2 <-sigma2; } そうしないと {{ val <-((prevmu1-mu1)* 2 +(prevmu2-mu2) * 2 +(prevsigma1-sigma1)* 2 +(prevsigma2-sigma2) * 2)** 0.5; print(c( "val:"、val)) if(val <= 1) {{ 壊す; } } カウント<-カウント+1 } print(mu1) print(mu2) print(sigma1) print(sigma2) }
于 2013-02-11T14:49:55.017 に答える