混合模型是k個分量分布的混合,,它們共同形成混合分布:F(x )f(x) F(x )= Σk = 1?α?F?(x )f(x)=∑k=1Kαkfk(x) 為什么要使用混合模型?讓我們通過一個例子激發(fā)您為何使用混合模型的原因,。讓我們說有人向您展示了以下密度圖: p <- ggplot(faithful, aes(x = waiting)) +
geom_density()
p
我們可以立即看到所得到的分布似乎是雙峰的(即有兩個凸起),,表明這些數(shù)據可能來自兩個不同的來源。 head(faithful)
## eruptions waiting
## 1 3.600 79
## 2 1.800 54
## 3 3.333 74
## 4 2.283 62
## 5 4.533 85
## 6 2.883 55
該數(shù)據是2列data.frame 火山噴發(fā):噴發(fā)時間(分鐘) 等待:噴發(fā)之間的時間(分鐘)
p +
geom_vline(xintercept = 53, col = "red", size = 2) +
geom_vline(xintercept = 80, col = "blue", size = 2)
使用高斯混合模型進行聚類 執(zhí)行混合模型聚類時,,您需要做的第一件事是確定要用于組件的統(tǒng)計分布類型,。 正態(tài)分布由兩個變量參數(shù)化: 我們將用 代碼來演示GMM的實際應用: set.seed(1)
wait <- faithful$waiting
mixmdl <- normalmixEM(wait, k = 2)
data.frame(x = mixmdl$x) %>%
ggplot() +
fill = "white") +
stat_function(geom = "line", fun = plot_mix_comps,
args = list(mixmdl$mu[1], mixmdl$sigma[1], lam = mixmdl$lambda[1]),
(geom = "line", fun = plot_mix_comps,
args = list(mixmdl$mu[2], mixmdl$sigma[2], lam = mixmdl$lambda[2]),
colour = "blue", lwd = 1.5) +
ylab("Density")
實際上很簡單; 紅色和藍色線僅表示2種不同的擬合高斯分布。平均值分別為: mixmdl$mu
## [1] 54.61489 80.09109
分別具有以下標準偏差: mixmdl$sigma
## [1] 5.871244 5.867716
mixmdl$lambda
## [1] 0.3608869 0.6391131
另一個重要方面是每個輸入數(shù)據點實際上被分配了屬于這些組件之一的后驗概率,。我們可以使用以下代碼檢索這些數(shù)據: post.df <- as.data.frame(cbind(x = mixmdl$x, mixmdl$posterior))
head(post.df, 10) #
<span style="color:#333333"><span style="color:#333333"><code>## x comp.1 comp.2
## 1 79 0.0001030875283 0.999896912472
## 2 54 0.9999093397312 0.000090660269
## 3 74 0.0041357268361 0.995864273164
## 4 62 0.9673819082244 0.032618091776
## 5 85 0.0000012235720 0.999998776428
## 6 55 0.9998100114503 0.000189988550
## 7 88 0.0000001333596 0.999999866640
## 8 85 0.0000012235720 0.999998776428
## 9 51 0.9999901530788 0.000009846921
## 10 85 0.0000012235720 0.999998776428
</code></span></span>
x列表示數(shù)據的值,,而comp.1和comp.2分別表示屬于任一組件的后驗概率。 最終用戶決定使用什么“閾值”將數(shù)據分配到組中,。例如,可以使用0.3作為后閾值來將數(shù)據分配給comp.1并獲得以下標簽分布,。
|