Clustering data yang berisik atau dengan outlier

9

Saya memiliki data berisik dari dua variabel seperti ini.

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

Secara visual saya bisa melihat ada 10 cluster potensial dalam tampilan lebih dekat.

masukkan deskripsi gambar di sini

Namun seluruh data memiliki banyak titik penyebaran:

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

masukkan deskripsi gambar di sini

Saya ingin membuat 10 cluster. Saya mencoba analisis klaster 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))

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Apakah ada (mungkin kernel k-means, tetangga terdekat) yang dapat berbuat lebih adil untuk jenis data ini. Jika demikian, bagaimana saya bisa melakukan ini?

belajar
sumber
1
Apa yang salah dengan apa yang Anda miliki sejauh ini? Mengapa apa yang Anda miliki ( analisis klaster k-means ) tidak dapat diterima?
Steve S
Lihatlah algoritma dbscan atau optik (lihat en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/… )
Giorgio Spedicato

Jawaban:

7

Karena data Anda tampaknya terdiri dari Campuran Gaussian, cobalah Pemodelan Campuran Gaussian (alias: pengelompokan EM). Ini akan menghasilkan hasil yang jauh lebih baik daripada k-means pada tipe data ini.

Jika "noise" Anda terdistribusi seragam, Anda juga dapat menambahkan distribusi seragam ke model campuran Anda.

Jika data Anda kurang bersih, pertimbangkan untuk menggunakan DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... - clusterig berbasis kepadatan sepertinya cocok untuk data ini. DBSCAN juga sangat toleran terhadap kebisingan ("N" untuk kebisingan).

Memiliki QUIT - Anony-Mousse
sumber
4

Saya sarankan Anda untuk melihat artikel ini . Penulis mengusulkan metode yang kuat di mana outlier dihapus dan sisa data dikelompokkan. Itu sebabnya mereka menyebut metode "trimming". Ada juga paket R tclust tetapi menurut ini , itu dihapus dari CRAN. Lagi pula, artikel ini layak dibaca.

Miroslav Sabo
sumber