聚类嘈杂的数据或与离群值


9

我有两个这样的变量的嘈杂数据。

x1 <- rep(seq(0,1, 0.1), each = 3000)
set.seed(123)
y1 <- rep (c(0.2, 0.8, 0.3, 0.9, 0.65, 0.35,0.7,0.1,0.25, 0.3, 0.95), each = 3000)
set.seed(1234)
e1 = rnorm(length(x1), 0.07,0.07)
set.seed(1223)
e2 = rnorm(length(x1), 0.07,0.07)
set.seed(1334)
yn <- rnorm(20000, 0.5,0.9)
set.seed(2344)
xn <- rnorm(20000, 0.5,0.9)
y <- c(y1 + e1,yn) 
x <- c(x1 + e2, xn) 
plot(x,y,  xlim=c(0,1.2), ylim = c(0,1.2), pch = ".", col = "gray40") 

我可以从视觉上看到有近十个潜在的簇。

在此处输入图片说明

但是,整个数据有很多要点:

plot(x,y,   pch = ".", col = "gray40") 

在此处输入图片说明

我想做10个集群。我尝试了K-均值聚类分析。

xm1 <- cbind(x,y)
cl1 <- kmeans(xm1, 10)
colrs <- c("red", "green", "blue1", "pink", "green4","tan", 
 "gray40", "yellow", "black", "purple") 
plot(xm1, col = colrs[cl1$cluster], pch = ".", xlim=c(0,1.2), ylim = c(0,1.2))

在此处输入图片说明

plot(xm1, col = colrs[cl1$cluster], pch = ".")

在此处输入图片说明

无论如何,是否存在(可能是核k均值,最近的邻居)可以对此类数据做更多的判断。如果可以,我该怎么做?


1
到目前为止,您有什么问题?为什么您所拥有的(k均值聚类分析)不可接受?
史蒂夫S

Answers:


7

由于您的数据似乎由高斯混合组成,因此请尝试进行高斯混合建模(又称EM聚类)。在这种类型的数据上,这将产生远远优于k均值的结果。

如果您的“噪声”是均匀分布的,则还可以将均匀分布添加到混合模型中。

如果您的数据不太干净,请考虑使用DBSCAN,MeanShift,OPTICS,HDBSCAN *,...- 基于密度的clusterig似乎适合此数据。DBSCAN也非常容忍噪声(“ N”代表噪声)。


4

我建议您看一下这篇文章。作者提出了一种健壮的方法,该方法可以去除异常值,并对其余数据进行聚类。这就是为什么他们称该方法为“修剪”。还有的R包tclust但根据,将其从CRAN除去。无论如何,这篇文章值得一读。

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.