Agrupando dados ruidosos ou com outliers

9

Eu tenho dados barulhentos de duas variáveis ​​como esta.

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") 

Eu posso ver visualmente que existem 10 clusters em potencial.

insira a descrição da imagem aqui

No entanto, todos os dados têm muitos pontos espalhados:

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

insira a descrição da imagem aqui

Eu gostaria de fazer 10 clusters. Eu tentei a análise de cluster K-means.

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))

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

Existe alguma maneira (pode haver k-means do kernel, vizinhos mais próximos) que possam fazer mais justiça a esse tipo de dados. Se sim, como posso fazer isso?

rdorlearn
fonte
11
O que há de errado com o que você tem até agora? Por que o que você tem (a análise de cluster k-means ) é inaceitável?
Steve S
Dê uma olhada nos algoritmos do dbscan ou do óptico (consulte en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/… )
Giorgio Spedicato

Respostas:

6

Como seus dados parecem ser compostos de misturas gaussianas, tente a modelagem de misturas gaussianas (aka: agrupamento EM). Isso deve produzir resultados muito superiores às médias k neste tipo de dados.

Se o seu "ruído" é distribuído uniformemente, você também pode adicionar uma distribuição uniforme ao seu modelo de mistura.

Se seus dados estiverem muito menos limpos, considere usar DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... - cluster com base na densidade parece ser apropriado para esses dados. O DBSCAN também é muito tolerante ao ruído (o "N" é para ruído).

Possui QUIT - Anony-Mousse
fonte
3

Eu recomendo que você analise este artigo. Os autores propõem um método robusto onde os outliers são removidos e o restante dos dados é agrupado. É por isso que eles chamaram o método "aparar". Havia também um pacote R tclust, mas de acordo com isso , ele foi removido do CRAN. De qualquer forma, vale a pena ler o artigo.

Miroslav Sabo
fonte