R语言使用混合模型进行聚类

原文链接:http://tecdat.cn/?p=6112

 

 混合模型是k个分量分布的混合,它们共同形成混合分布:F(x )f(x)

F(x )= Σk = 1ķαķFķ(x )f(x)=∑k=1Kαkfk(x)

 

 

为什么要使用混合模型?

让我们通过一个例子激发您为何使用混合模型的原因。让我们说有人向您展示了以下密度图:

 

p <- ggplot(faithful, aes(x = waiting)) +
  geom_density()
p
R语言使用混合模型进行聚类

R语言使用混合模型进行聚类R语言使用混合模型进行聚类

我们可以立即看到所得到的分布似乎是双峰的(即有两个凸起),表明这些数据可能来自两个不同的来源。

 

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 
R语言使用混合模型进行聚类

该数据是2列data.frame

  • 火山喷发:喷发时间(分钟)
  • 等待:喷发之间的时间(分钟)

 

p + 
  geom_vline(xintercept = 53, col = "red", size = 2) + 
  geom_vline(xintercept = 80, col = "blue", size = 2)
R语言使用混合模型进行聚类

 

R语言使用混合模型进行聚类R语言使用混合模型进行聚类

 

 

使用高斯混合模型进行聚类

 执行混合模型聚类时,您需要做的第一件事是确定要用于组件的统计分布类型。 

正态分布由两个变量参数化:

  • μμ
  • σ2σ2

 我们将用 代码来演示GMM的实际应用:

 

set.seed(1)
wait <- faithful$waiting
mixmdl <- normalmixEM(wait, k = 2)
R语言使用混合模型进行聚类
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")
R语言使用混合模型进行聚类

R语言使用混合模型进行聚类R语言使用混合模型进行聚类

 

实际上很简单; 红色和蓝色线仅表示2种不同的拟合高斯分布。平均值分别为:

mixmdl$mu
## [1] 54.61489 80.09109
R语言使用混合模型进行聚类

分别具有以下标准偏差:

mixmdl$sigma
## [1] 5.871244 5.867716
R语言使用混合模型进行聚类

 

mixmdl$lambda
## [1] 0.3608869 0.6391131
R语言使用混合模型进行聚类

另一个重要方面是每个输入数据点实际上被分配了属于这些组件之一的后验概率。我们可以使用以下代码检索这些数据:

post.df <- as.data.frame(cbind(x = mixmdl$x, mixmdl$posterior))
head(post.df, 10)  #
R语言使用混合模型进行聚类
<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>
R语言使用混合模型进行聚类

x列表示数据的值,而comp.1和comp.2分别表示属于任一组件的后验概率。

最终用户决定使用什么“阈值”将数据分配到组中。例如,可以使用0.3作为后阈值来将数据分配给comp.1并获得以下标签分布。

R语言使用混合模型进行聚类R语言使用混合模型进行聚类​ 

R语言使用混合模型进行聚类R语言使用混合模型进行聚类

 

 

 

大数据部落——中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务 统计分析和数据挖掘咨询服务 :y0.cn/teradat(咨询服务请联系官网客服R语言使用混合模型进行聚类QQ:3025393450   【服务场景】   科研项目;    公司项目外包 ;线上线下一对一培训 ;数据采集;学术研究;报告撰写;市场调查。 【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询服务
R语言使用混合模型进行聚类 分享最新的大数据资讯,每天学习一点数据分析,让我们一起做有态度的数据人R语言使用混合模型进行聚类 微信客服号:lico_9e QQ交流群:186388004 R语言使用混合模型进行聚类

欢迎选修我们的R语言数据分析挖掘必知必会课程!

 

R语言使用混合模型进行聚类


欢迎关注微信公众号,了解更多数据干货资讯! R语言使用混合模型进行聚类
上一篇:Arcpy脚本——基于Arcgis实现shp/gdb等到火星/百度坐标系的转换


下一篇:Convert Geometry data into a Geography data in MS SQL Server