Kmean kümelenmesi için R'deki istatistik paketini kullanma


10

Küme paketinin bir veya iki yönünü anlamakta güçlük çekiyorum. Quick-R'deki örneği yakından takip ediyorum , ancak analizin bir veya iki yönünü anlamıyorum. Bu özel örnek için kullandığım kodu dahil ettik.

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

Sonra değişkenleri standartlaştırıyorum:

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

Benim sorum, (kodumda işaretli Q1) kümelerin sayısını gösteren arsa gerçek değerlerle (küme numarası ve değişken adı) nasıl ilişkili olabilir?

Güncelleme: Şimdi clusplot()işlevin PCA1 ve PCA2 ile iki değişkenli bir çizim olduğunu anlıyorum. Ancak, PCA bileşenleri ile küme grupları arasındaki bağlantıyı anlamıyorum. PCA değerleri ile kümeleme grupları arasındaki ilişki nedir? Başka yerlerde kmeans ve PCA arasındaki bağlantıyı okudum, ancak yine de aynı iki değişkenli grafikte nasıl görüntülenebileceğini anlamıyorum.


Son birkaç gün içinde kümelenme hakkında çok fazla soru sorduğumda özür dilerim. Bu alana hızlı bir şekilde daha aşina olmaya çalışıyorum (ayrıca bu soruyu SO, stackoverflow.com/questions/4997870/… 'da yayınladım, ancak buraya taşınması önerildi)
celenius

Tamam, bu TCS değil. (-;

# Küme sayısını belirleme Neden bu formülü (mydata, 2, var) ve neden 2:15 kullandığımızı açıklayabilir misiniz?

Yanıtlar:


8

Soru 1'i tam olarak anlamadım, ama cevap vermeye çalışacağım. Q1 grafiği, küme sayısı değiştikçe karelerin toplamının (wss) nasıl değiştiğini gösterir. Bu tür grafiklerde, grafikteki bükülmeleri aramalısınız, 5'teki bir bükülme, 5 küme kullanmanın iyi bir fikir olduğunu gösterir.

WSS'nin değişkenlerinizle aşağıdaki anlamda bir ilişkisi vardır, WSS'nin formülü

jxiCj||xiμj||2

μjjxiiCj

2. sorunun cevabı şudur. Aslında izlediğiniz clusplot()şey, gözlemlerinizin ana düzlemdeki grafiğidir. Bu işlevin yaptığı, gözlemlerinizin her biri için ana bileşen puanını hesaplamak, bu puanları çizmek ve kümeye göre renklendirmektir.

Temel bileşen analizi (PCA) bir boyut küçültme tekniğidir; tüm değişkenlerin bilgilerini, bileşen adı verilen birkaç "yeni" değişken içinde "özetler". Her bileşen, toplam değişkenliğin belirli bir yüzdesini açıklamaktan sorumludur. Örnekte "Bu iki bileşen toplam değişkenliğin% 73,95'ini açıklamaktadır" yazısını okudunuz.

İşlev clusplot(), kümelemenin etkinliğini tanımlamak için kullanılır. Başarılı bir kümelemeye sahip olmanız durumunda, kümelerin ana düzlemde açıkça ayrıldığını göreceksiniz. Öte yandan, kümeleme başarısız olduğunda ana düzlemde birleştirilmiş kümeleri göreceksiniz.

Temel bileşen analizi hakkında daha fazla bilgi için wiki'yi okuyabilirsiniz. Eğer bir kitap istiyorsanız Izenmann'ın Modern Çok Değişkenli Tekniklerini öneriyorum, orada PCA ve k-araçları bulacaksınız.

Bu yardımcı olur umarım :)


1
Cevabınız için teşekkür ederim. clusplot()İşlev hakkında bir sorum daha vardı . PCA değerleri ile kümeleme grupları arasındaki ilişki nedir? Başka yerlerde kmeans ve PCA arasındaki bağlantıyı okudum, ancak yine de aynı iki değişkenli grafikte nasıl görüntülenebileceğini anlamıyorum. (Belki de bu başlı başına yeni bir soru olmalıdır).
celenius

2
Aslında, PCA değerleri ve kümeleme grupları bağımsızdır. PCA, her gözlem için "yeni" koordinatlar oluşturur mydata; bu, çizimde gerçekte gördüğünüz şeydir. Noktaların şekli fit$cluster, 'nin ikinci parametresi kullanılarak çizilir clusplot(). Belki PCA'ya daha derinlemesine bakmalısınız. Bunun size yardımcı olup olmadığını veya başka referanslarınızı bildirin.
deps_stats

1
Yardımcı olur (benim sorunumu bildiğim için!). fit$clusterPCA "koordinatları" ile nasıl ilişkilidir? Sanırım PCA'nın nasıl çalıştığını anlıyorum, ama anladığım kadarıyla, her Bileşen orijinal verilerdeki değişkenler kullanılarak açıklanamıyor (daha ziyade ham verilerin doğrusal bir birleşimi), bu yüzden nasıl olabileceğini anlamıyorum kümeler ile ilgili.
celenius

2
Neredeyse anladınız :) fit$clusterPCA ile ilgisi yok. Ne clusplot()yapar "yeni" koordinatlarını kullanarak noktalar çizmek ve kullanarak etiketlemek etmektir fit$cluster. Küme 3 için '+', küme 1 için 'o' ve küme 2 için bir üçgen var. İşlev clusplot(), kümelemeyi görselleştirmek için kullanışlıdır.
deps_stats

1
"Yeni" koordinatlarla PCA1 ve PCA2'yi kastediyorum. Haklısın, tamamen fit$cluster
ilgisizler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.