Masalah utama dari semua algoritma klasik untuk analisis data adalah penerapannya yang rendah pada masalah praktis. Ini juga berlaku untuk tugas pengelompokan.
Secara nyata (dan juga dalam masalah ilmiah), menjadi penting untuk mengelompokkan data dengan tipe campuran - misalnya, ketika setengah dari variabel adalah numerik dan setengah dari variabel adalah kategori.
Secara terpisah, tugas-tugas ini diselesaikan dengan cara standar (misalnya, artikel tentang pengelompokan hierarki data murni kategorikal - https://habr.com/ru/company/otus/blog/461741/ ), namun, memecahkan masalah pengelompokan data campuran menghadirkan beberapa kesulitan, terutama terkait dengan kompleksitas penghitungan jarak antar observasi.
Suatu momen teori
Metode yang ada mengasumsikan penghitungan jarak untuk Gower menggunakan fungsi daisy (daisy (method = "gower")) dalam paket cluster.
Namun, menurut pembuat paket clustMixType , metode ini tidak dapat diterapkan saat memproses data dalam jumlah besar, dan metode yang berbeda diterapkan dalam paketnya.
Landasan teoritis dari metode pengelompokan yang diimplementasikan dikembangkan kembali pada tahun 1999 dalam karya Z. Huang. Ekstensi pada algoritme k-means untuk mengelompokkan kumpulan data besar dengan variabel kategori. Penambangan Data dan Penemuan Pengetahuan, 2: 283-304, 1998. doi: 10.1023 / A: 1009769707641. Ini disebut metode k-prototipe dan didasarkan pada rumus jarak berikut:
Dimana
Faktanya, jarak dihitung dengan menggabungkan jumlah kuadrat selisih variabel numerik dan jumlah kelas yang tidak cocok dalam variabel kategori, dikalikan dengan beberapa parameter γ.
Jadi, untuk keberhasilan penerapan metode ini, diperlukan dua parameter eksternal: k (jumlah cluster) dan γ (pentingnya variabel kategori; jika γ = 0, maka jarak dikurangi menjadi jarak Euclidean klasik)
Kembali berlatih
, (CollegeDistance AER). , :
score ( : )
fcollege ( : )
mcollege ( : )
urban ( : )
education ( : )
income ( : 25 000 ?)
#
library(tibble)
library(clustMixType)
library(AER)
data("CollegeDistance")
glimpse(CollegeDistance)
XX<-CollegeDistance[,c(3,4,5,7,10,12,13)] #
–
clus_2<-kproto(XX, k = 2) # k -
RStudio :
, , 0 , γ 84.15475 ( ). clus_2 :
clus_2$cluster # ,
clus_2$centers #
, , –
clus_2$size #
:
library(wesanderson)
par(mfrow=c(4,2))
clprofiles(clus_2, XX, col = wes_palette("Royal1", 2, type = "continuous"))
, :
-
-
-
- .
table(XX$income, clus_2$cluster)
, 482 1790 , – 883 1584 .
– γ ( γ ). lambdaest
lambdaest(XX, num.method = 1, fac.method = 1, outtype = "vector")
– γ
– γ
Es <- numeric(10)
for(i in 1:10){
kpres <- kproto(XX,lambda = c(0.01320599,3.03450559,4.21940823,2.79814318,0.18950893,0.31241193,2.43817959), k = i )
Es[i] <- kpres$tot.withinss
}
plot(1:10, Es, type = "b", ylab = "Objective Function", xlab = "# Clusters",
main = "Scree Plot")
, – 4 ( ; 6 9 – - ). :
Artikel asli oleh pengembang paket clustMixType: https://journal.r-project.org/archive/2018/RJ-2018-048/RJ-2018-048.pdf