与えられた式についてよくわからないので、誰かが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 に答える