1. 程式人生 > 其它 >EM演算法、存在噪聲的EM演算法

EM演算法、存在噪聲的EM演算法

1 EM演算法的R語言實現

#步驟1 資料集準備及其描述

library(mclust)

mod1<-Mclust(iris[,1:4])

summary(mod1)

 

#步驟2 構建EM演算法模型,指定分3

mod2<-Mclust(iris[,1:4],G=3)

summary(mod2,parameters=T)

 

#步驟3 構建EM演算法模型,指定先驗概率

mod3<-Mclust(iris[,1:4],prior=priorControl(functionName="defaultPrior",shrinkage=0.1))

summary(mod3)

 

 

存在噪聲的EM演算法R語言實現

 

#步驟1 資料集準備

 

set.seed(0) #設定隨機種子

 

nNoise=100

 

Noise=apply(faithful,2,function(x)runif(nNoise,min=min(x)-.1,max=max(x)+.1)) #faithful是一個數據集,表示火山噴發之間的等待時間以及美國懷俄明州黃石國家公園老忠實間歇泉的持續時間。

 

dim(faithful)

 

 

 

解釋:#runif()函式用於生成從01區間範圍內的服從正態分佈的隨機數,每次生成的值都不一樣。#runif(20) 表示生成2001之間的隨機數

 

            #

runif(nNoise,min=min(x)-.1,max=max(x)+.1) 表示總共生成nNoise個隨機數,且隨機數下限為min=min(x)-.1,上限為max=max(x)+.1,

 

           #apply(faithful,2,FUN) 第一個引數表示要參與計算的資料,第二個引數1表示對行計算,2表示對列計算,第三個引數表示對資料的行(列)進行什麼運算(比如:均值,和等)。

 

           #Noise=apply(faithful,2,function(x)runif(nNoise,min=min(x)-.1,max=max(x)+.1)) 表示生成100

個隨機數,且最小的數比faithful資料中最小的小0.1,最大的數比faithful資料中最大的大0.1

 

 

data<-rbind(faithful,Noise) #帶有人工噪聲的資料集data ,rbind 行合併,要求列數一樣。

 

dim(data)

 

 

 

#步驟2 資料集視覺化

 

plot(faithful)  #展示faithful資料集的分佈

 

 

 

points(Noise,pch=20,cex=0.5,col="lightgrey") #把人工噪聲資料加進去顯示,並且設定噪聲資料顯示的符號pch,噪聲資料的大小cex,噪聲資料的顏色col

 

 

 

 

 

 

set.seed(0)

 

NoiseInit<-sample(c(TRUE,FALSE),size=nrow(faithful)+nNoise,replace = T,prob = c(3,1)/4)

 

#sample(x, size, replace = FALSE,prob ) x表示要抽樣的資料,size表示抽樣的大小,replace = FALSE表示不重複抽樣,replace = TRUE表示重複抽樣,prob 表示樣本中元素被抽到的可能性

 

 

 

size=nrow(faithful)+nNoise

 

size

 

 

 

prob = c(3,1)/4

 

prob

 

 

 

#步驟3 模型建立

 

library(mclust)  

 

mod4=Mclust(data,initialization=list(noise=NoiseInit)) #建立EM模型,initialization引數為包含零個或多個以下元件的列表:hcPairssubsetnoise

 

summary(mod4,parameter=TRUE)

 

 

 

 

 

#par(mfrow=c(1,1))

 

plot(mod4)

 

 

 

 

 

1貝葉斯資訊度量圖 BIC

 

 

 

 

 

2 分類圖classification

 

 

 

 

 

3 不確定性圖uncertainty

 

 

 

4 密度圖 density