如何拟合混合模型以进行聚类


15

我有两个变量-X和Y,我需要使簇最大(最优)=5。让我们理想的变量图如下所示:

在此处输入图片说明

我想做5个这样的集群。像这样:

在此处输入图片说明

因此,我认为这是具有5个群集的混合模型。每个聚类都有中心点和围绕它的置信度。

这些簇并不总是这样,它们看起来如下所示,其中有时两个簇靠在一起,或者一个或两个簇完全缺失。

在此处输入图片说明

在此处输入图片说明

在这种情况下如何有效地拟合混合模型并进行分类(聚类)?

例:

set.seed(1234)
X <- c(rnorm(200, 10, 3), rnorm(200, 25,3),
        rnorm(200,35,3), rnorm(200,65, 3), rnorm(200,80,5))
Y <- c(rnorm(1000, 30, 2))
plot(X,Y, ylim = c(10, 60), pch = 19, col = "gray40")

Answers:


13

这是使用mcluster使用混合模型的脚本。

X <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3), rnorm(200,65, 3), rnorm(200,80,5))
Y <- c(rnorm(1000, 30, 2))
plot(X,Y, ylim = c(10, 60), pch = 19, col = "gray40")

require(mclust)
xyMclust <- Mclust(data.frame (X,Y))
plot(xyMclust)

在此处输入图片说明 在此处输入图片说明

在少于五个集群的情况下:

X1 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),  rnorm(200,80,5))
Y1 <- c(rnorm(800, 30, 2))
xyMclust <- Mclust(data.frame (X1,Y1))
plot(xyMclust)

在此处输入图片说明

 xyMclust4 <- Mclust(data.frame (X1,Y1), G=3)
plot(xyMclust4)

在此处输入图片说明

在这种情况下,我们适合3个群集。如果我们适合5个集群怎么办?

xyMclust4 <- Mclust(data.frame (X1,Y1), G=5)
plot(xyMclust4)

它可以强制制作5个群集。

在此处输入图片说明

还让我们介绍一些随机噪声:

X2 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),  rnorm(200,80,5), runif(50,1,100 ))
Y2 <- c(rnorm(850, 30, 2))
xyMclust1 <- Mclust(data.frame (X2,Y2))
plot(xyMclust1)

mclust允许基于模型的带噪声的聚类,即不属于任何聚类的离群值。mclust允许指定先验分布以规范对数据的拟合。priorControlmclust中提供了一个函数,用于指定先验及其参数。当使用默认值调用时,它将调用另一个函数,该函数defaultPrior可以用作指定替代优先级的模板。要将噪声包括在建模中,必须通过Mclust或中的初始化参数的噪声分量提供对噪声观测值的初始猜测mclustBIC

在此处输入图片说明

另一种选择是使用mixtools 软件包,该软件包允许您为每个组件指定均值和西格玛。

X2 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),
    rnorm(200,80,5), rpois(50,30))
Y2 <- c(rnorm(800, 30, 2), rpois(50,30))
df <- cbind (X2, Y2)
require(mixtools)
out <- mvnormalmixEM(df, lambda = NULL, mu = NULL, sigma = NULL,
   k = 5,arbmean = TRUE, arbvar = TRUE, epsilon = 1e-08,  maxit = 10000, verb = FALSE)
plot(out, density = TRUE, alpha = c(0.01, 0.05, 0.10, 0.12, 0.15),  marginal = TRUE)

在此处输入图片说明


2
+1这个答案非常有用,有用且简洁,是一个完美的例子,说明在R中做这样的事情几乎是太容易了,甚至不知道它背后的数学原理是什么
Paul

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.