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

一年前我还在 (edit)R 中写了一个简单的例子,不幸的是我找不到它。稍后我会再次尝试找到它。

编辑:这是-

EM <-函数()
{
    ### 读取文件,获取必要的列
    dataFile <- read.csv("wine.csv", head = FALSE, sep = ",")
    sl <- 数据文件 [, 2]
    #sw <- 数据文件 [, 3]
    #pl <- 数据文件 [, 3]
    #pw <- 数据文件 [, 4]
    类 <- 数据文件 [, 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
    打印(mu1)
    打印(亩2)
    打印(sigma1)
    打印(sigma2)
    计数 <- 10
    计数 <- 1
    prevmu1 <- 0.0;
    prevmu2 <- 0.0;
    prevsigma1 <- 0.0;
    prevsigma2 <- 0.0;
    伽玛 <- 数组(0,长度(sl))
    而(计数 <= 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 打印(c(mu1,mu2,sigma1,sigma2,pi1)) 如果(计数 == 1) { prevmu1 <- mu1; prevmu2 <- mu2; prevsigma1 <- sigma1; prevsigma2 <- sigma2; } 别的 { val <- ((prevmu1 - mu1)* 2 + (prevmu2 - mu2) *2 + (prevsigma1 - sigma1)* 2 + (prevsigma2 - sigma2) *2) ** 0.5; 打印(c(“val:”,val)) 如果 (val <= 1) { 休息; } } 计数 <- 计数 + 1 } 打印(mu1) 打印(亩2) 打印(sigma1) 打印(sigma2) }

于 2013-02-11T14:49:55.017 回答