6

与えられた式についてよくわからないので、誰かがEMアルゴリズムの簡単な数値例を提供できますか?4または5のデカルト座標を持つ本当に単純なもので十分です。

4

1 に答える 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 に答える