Menggunakan paket statistik dalam R untuk kmeans clustering

10

Saya mengalami kesulitan memahami satu atau dua aspek dari paket cluster. Saya mengikuti contoh dari Quick-R dengan cermat, tetapi tidak memahami satu atau dua aspek analisis. Saya telah memasukkan kode yang saya gunakan untuk contoh khusus ini.

## Libraries
library(stats)
library(fpc) 

## Data
mydata = structure(list(a = c(461.4210925, 1549.524107, 936.42856, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131.4349206, 0, 762.6110846, 
3837.850406), b = c(19578.64174, 2233.308842, 4714.514274, 0, 
2760.510002, 1225.392118, 3706.428246, 2693.353714, 2674.126613, 
592.7384164, 1820.976961, 1318.654162, 1075.854792, 1211.248996, 
1851.363623, 3245.540062, 1711.817955, 2127.285272, 2186.671242
), c = c(1101.899095, 3.166506463, 0, 0, 0, 1130.890295, 0, 654.5054857, 
100.9491289, 0, 0, 0, 0, 0, 789.091922, 0, 0, 0, 0), d = c(33184.53871, 
11777.47447, 15961.71874, 10951.32402, 12840.14983, 13305.26424, 
12193.16597, 14873.26461, 11129.10269, 11642.93146, 9684.238583, 
15946.48195, 11025.08607, 11686.32213, 10608.82649, 8635.844964, 
10837.96219, 10772.53223, 14844.76478), e = c(13252.50358, 2509.5037, 
1418.364947, 2217.952853, 166.92007, 3585.488983, 1776.410835, 
3445.14319, 1675.722506, 1902.396338, 945.5376228, 1205.456943, 
2048.880329, 2883.497101, 1253.020175, 1507.442736, 0, 1686.548559, 
5662.704559), f = c(44.24828759, 0, 485.9617601, 372.108855, 
0, 509.4916263, 0, 0, 0, 212.9541122, 80.62920455, 0, 0, 30.16525587, 
135.0501384, 68.38023073, 0, 21.9317122, 65.09052886), g = c(415.8909649, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637.2629479, 0, 0, 
0), h = c(583.2213618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), i = c(68206.47387, 18072.97762, 23516.98828, 
13541.38572, 15767.5799, 19756.52726, 17676.00505, 21666.267, 
15579.90094, 14351.02033, 12531.38237, 18470.59306, 14149.82119, 
15811.23348, 14637.35235, 13588.64291, 12549.78014, 15370.90886, 
26597.08152)), .Names = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i"), row.names = c(NA, -19L), class = "data.frame")

Lalu saya membakukan variabel:

# standardize variables
mydata <- scale(mydata) 

## K-means Clustering 

# Determine number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata, centers=i)$withinss)
# Q1
plot(1:15, wss, type="b", xlab="Number of Clusters",  ylab="Within groups sum of squares") 

# K-Means Cluster Analysis
fit <- kmeans(mydata, 3) # number of values in cluster solution

# get cluster means 
aggregate(mydata,by=list(fit$cluster),FUN=mean)

# append cluster assignment
mydata <- data.frame(mydata, cluster = fit$cluster)

# Cluster Plot against 1st 2 principal components - vary parameters for most readable graph
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0) # Q2

# Centroid Plot against 1st 2 discriminant functions
plotcluster(mydata, fit$cluster)

Pertanyaan saya adalah, bagaimana plot yang menunjukkan jumlah cluster (ditandai Q1dalam kode saya) dapat dikaitkan dengan nilai aktual (nomor cluster dan nama variabel)?

Pembaruan: Saya sekarang mengerti bahwa clusplot()fungsinya adalah plot bivariat, dengan PCA1 dan PCA2. Namun, saya tidak mengerti hubungan antara komponen PCA dan grup cluster. Apa hubungan antara nilai-nilai PCA dan kelompok-kelompok pengelompokan? Saya telah membaca di tempat lain tentang hubungan antara kmeans dan PCA, tapi saya masih tidak mengerti bagaimana mereka dapat ditampilkan pada grafik bivariat yang sama.

celenius
sumber
maaf jika saya sudah mengajukan terlalu banyak pertanyaan tentang pengelompokan selama beberapa hari terakhir. Saya mencoba untuk menjadi lebih akrab dengan bidang ini dengan cepat (juga saya memposting pertanyaan ini pada SO, stackoverflow.com/questions/4997870/… tetapi disarankan untuk memindahkannya di sini)
celenius
Tidak apa-apa, ini bukan TCS.SE (-;
# Tentukan jumlah cluster. Bisakah Anda menjelaskan mengapa kami menggunakan rumus ini (mydata, 2, var) dan mengapa 2:15?

Jawaban:

8

Saya tidak memahami pertanyaan 1 sepenuhnya, tetapi saya akan mencoba jawaban. Plot Q1 menunjukkan bagaimana jumlah dalam kuadrat (wss) berubah sebagai perubahan nomor cluster. Dalam plot seperti ini Anda harus mencari ketegaran dalam grafik, ketegaran pada 5 menunjukkan bahwa sebaiknya menggunakan 5 klaster.

WSS memiliki hubungan dengan variabel Anda dalam pengertian berikut, rumus untuk WSS adalah

jxsayaCj||xsaya-μj||2

μjx i i C jjxsayasayaCj

Jawaban untuk pertanyaan 2 adalah ini. Apa yang Anda benar-benar tonton clusplot()adalah plot pengamatan Anda di pesawat utama. Apa fungsi ini lakukan adalah menghitung skor komponen utama untuk setiap pengamatan Anda, merencanakan skor-skor tersebut dan mewarnai dengan cluster.

Principal component analysis (PCA) adalah teknik reduksi dimensi; itu "merangkum" informasi semua variabel menjadi beberapa variabel "baru" yang disebut komponen. Setiap komponen bertanggung jawab untuk menjelaskan persentase tertentu dari total variabilitas. Pada contoh Anda membaca "Dua komponen ini menjelaskan 73,95% dari total variabilitas".

Fungsi clusplot()ini digunakan untuk mengidentifikasi efektivitas pengelompokan. Jika Anda memiliki pengelompokan yang sukses, Anda akan melihat bahwa cluster dipisahkan dengan jelas di bidang utama. Di sisi lain, Anda akan melihat cluster digabung dalam bidang utama ketika pengelompokan tidak berhasil.

Untuk referensi lebih lanjut tentang analisis komponen utama, Anda dapat membaca wiki. jika Anda menginginkan buku yang saya sarankan Teknik Multivarian Modern oleh Izenmann, di sana Anda akan menemukan PCA dan k-means.

Semoga ini membantu :)

deps_stats
sumber
1
Terima kasih atas jawaban Anda. Saya punya satu pertanyaan lebih lanjut tentang clusplot()fungsi ini. Apa hubungan antara nilai-nilai PCA, dan kelompok-kelompok pengelompokan? Saya telah membaca di tempat lain tentang hubungan antara kmeans dan PCA, tapi saya masih tidak mengerti bagaimana mereka dapat ditampilkan pada grafik bivariat yang sama. (Mungkin ini seharusnya menjadi pertanyaan baru).
celenius
2
Sebenarnya, nilai-nilai PCA dan kelompok-kelompok pengelompokan adalah independen. PCA membuat koordinat "baru" untuk setiap pengamatan mydata, itulah yang sebenarnya Anda lihat di plot. Bentuk titik diplot menggunakan fit$cluster, parameter kedua dari clusplot(). Mungkin Anda harus melihat lebih dalam pada PCA. Beritahu saya jika ini membantu Anda, atau jika Anda referensi lebih lanjut.
deps_stats
1
Ini membantu (dalam arti bahwa saya mengasah masalah saya!). Bagaimana fit$clusterhubungannya dengan "koordinat" PCA? Saya rasa saya mengerti bagaimana PCA bekerja, tetapi seperti yang saya pahami, setiap komponen tidak dapat dijelaskan menggunakan variabel dari data asli (lebih tepatnya itu adalah kombinasi linear dari data mentah), itulah mengapa saya tidak mengerti bagaimana bisa terkait dengan cluster.
celenius
2
Anda hampir mendapatkannya :) fit$clustertidak ada hubungannya dengan PCA. Apa yang clusplot()dilakukan adalah memplot poin menggunakan koordinat "baru" dan melabelinya menggunakan fit$cluster. Saya mendapat '+' untuk klaster 3, 'o' untuk klaster 1 dan segitiga untuk klaster 2. Fungsi clusplot()ini berguna untuk memvisualisasikan klaster.
deps_stats
1
Yang saya maksud dengan koordinat "baru" adalah PCA1 dan PCA2. Anda benar, mereka sama sekali tidak terkait dengan fit$cluster:)
deps_stats