Modifikasi algoritma EM untuk menyelesaikan masalah pengelompokan dengan outlier

Masalah utama dari analisis klaster data praktis adalah adanya outlier. Sebagian besar metode pengelompokan yang ada tidak memperhitungkan keberadaannya, oleh karena itu, pengamatan anomali yang jelas termasuk dalam komposisi beberapa cluster, yang dapat secara serius menggantikan pusatnya dan mempengaruhi kualitas klasifikasi. Tentu saja, pertama-tama Anda dapat memeriksa data awal untuk mengetahui adanya outlier, menyingkirkannya, dll., tetapi kemudian tugas akan berubah menjadi dua tahap, tetapi kami ingin tugas itu "sekaligus".





Salah satu pendekatan untuk memecahkan masalah ini (untuk metode pengelompokan untuk secara otomatis menyaring outlier) disebut "penaksir kemungkinan maksimum yang tidak tepat yang disetel secara optimal" dan dijelaskan dalam artikel 2017 ini ( http://dx.doi.org/10.1080/ 01621459.2015. 1100996 ), dan baru-baru ini menerima implementasi di R. Mari kita bicarakan.





Teori sesaat

Singkatnya, pengelompokan menggunakan algoritma EM didasarkan pada asumsi bahwa cluster tertentu memiliki bentuk yang mendekati bentuk distribusi normal multivariat. Kemudian masalah pengelompokan dapat dianggap sebagai masalah pemisahan komponen-komponen campuran, dan pengelompokan ditentukan menurut probabilitas jatuh ke dalam satu atau komponen lain.





Peningkatan matematis dari algoritma klasik adalah bahwa asumsi yang sedikit berbeda diambil. Dipercaya bahwa fungsi probabilitas dari distribusi titik adalah jumlah dari campuran Gauss dan distribusi titik noise yang seragam (diasumsikan bahwa outlier didistribusikan secara merata), yaitu





- kerapatan konstan yang tidak tepat (kepadatan kebisingan)
- kerapatan konstan yang tidak tepat (kepadatan kebisingan)

Hal ini menyebabkan beberapa komplikasi dari solusi masalah optimasi, yang sekarang terlihat seperti solusi untuk masalah maksimum





tetapi dengan batasan seperti itu





Masalah optimasi ini (terutama dengan kondisi yang dikenakan pada rasio nilai eigen) tidak selalu memiliki solusi. Penulis jujur ​​tentang hal ini, tetapi mereka juga mengklaim bahwa algoritme mereka cukup mudah untuk mengatasi cluster dengan bentuk yang agak rumit. Mari kita periksa





Percobaan

- , .





library(ggplot2)
#   
set.seed(739)
n <- 500 # numer of points
y <- abs(c(rnorm(n,5,2)))
x <- c(rnorm(n,5,1))/sqrt(y)
class<-rep(1,n)
dat1 <- as.data.frame(cbind(x,y,class)) #   - -    
y <- c(rnorm(n,8,0.4))
x <- rlnorm(n, meanlog = log(7), sdlog = 0.2) 
class<-rep(2,n)
dat2 <- as.data.frame(cbind(x,y,class)) #   -       
y <- c(runif(n, min = 2, max = 7))
x <- c(rnorm(n,8,0.4))
class<-rep(3,n)
dat3 <- as.data.frame(cbind(x,y,class)) #   -  
y <- c(runif(n/10, min = 0, max = 10))
x <- c(runif(n/10, min = 0, max = 10))
class<-rep(0,n/10)
dat4 <- as.data.frame(cbind(x,y,class)) # 
dat <- rbind(dat1,dat2,dat3,dat4)
colnames(dat) <- c("x","y", "class")
dat$class <- as.factor(dat$class)
dat_test <- as.data.frame(dat)
p_base <- ggplot(dat,aes(x=x,y=y,color=class)) + geom_point()
ggExtra::ggMarginal(p_base, groupColour = TRUE, groupFill = TRUE)
      
      







Selanjutnya, label "0" menunjukkan pengamatan yang didefinisikan sebagai kebisingan
"0" ,

otrimle , , . 2 5, .





library(otrimle)
clus <- otrimleg(dat[,c(1,2)], G=2:5, monitor=1) #  monitor    
      
      



-





, ( , , , , iloglik . , , 4 5 3 - ). . , ,





clus$solution
      
      







Noise - , . ( 1,2,10 ) - 5 .





clus_2 <-otrimle(dat[,c(1,2)], G = 5, npr.max = 0.01, erc = 20, monitor = TRUE)
# npr.max -     
# erc -  /  
clus_2$code
clus_2$flag
      
      



clus_2$code 0, , , clus_2$code = 1, , EM- ( ), clus_2$code = 2, , .





clus_2$flag .





clus_2$flag = 1,





, , 0.





clus_2$flag = 2,





clus_2$flag = 3,





clus_2$flag = 4,





(clus_2$code = 2, clus_2$flag = 4), .





clus_2$mean #  
head(clus_2$tau) #    
head(clus_2$cluster) #   
      
      



. , .





Kiri - partisi benar, kanan - diusulkan oleh algoritma untuk kasus 5 cluster
- , - 5
Kiri - partisi benar, kanan - diusulkan oleh algoritma untuk kasus 4 cluster
- , - 4
Kiri - partisi benar, kanan - diusulkan oleh algoritma untuk kasus 3 cluster
- , - 3
Kiri - partisi benar, kanan - diusulkan oleh algoritma untuk kasus 2 cluster
- , - 2

Dapat dicatat bahwa bahkan jika seseorang menebak dengan jumlah cluster (3), maka hasil clustering, pada kenyataannya, akan sangat berbeda dari yang sebenarnya - dan gambaran yang lebih memadai akan diberikan oleh partisi dengan jumlah yang lebih besar. klaster daripada kenyataannya. Hal ini dikarenakan bentuk cluster yang tidak elips, namun secara umum algoritma bekerja dengan baik bahkan dalam kondisi noise.








All Articles