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)
2 存在噪聲的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()函式用於生成從0到1區間範圍內的服從正態分佈的隨機數,每次生成的值都不一樣。#runif(20) 表示生成20個0到1之間的隨機數
#
#apply(faithful,2,FUN) 第一個引數表示要參與計算的資料,第二個引數1表示對行計算,2表示對列計算,第三個引數表示對資料的行(列)進行什麼運算(比如:均值,和等)。
#Noise=apply(faithful,2,function(x)runif(nNoise,min=min(x)-.1,max=max(x)+.1)) 表示生成100
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引數為包含零個或多個以下元件的列表:hcPairs、subset、noise。
summary(mod4,parameter=TRUE)
#par(mfrow=c(1,1))
plot(mod4)
圖1貝葉斯資訊度量圖 BIC
圖2 分類圖classification
圖3 不確定性圖uncertainty
圖4 密度圖 density