kmeans 클러스터링을 위해 R의 통계 패키지 사용


10

클러스터 패키지의 하나 또는 두 가지 측면을 이해하는 데 어려움이 있습니다. Quick-R 의 예제를 자세히 따르고 있지만 분석의 한두 가지 측면을 이해하지 못합니다. 이 특정 예제에 사용중인 코드를 포함 시켰습니다.

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

그런 다음 변수를 표준화합니다.

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

내 질문은, 클러스터 수 ( Q1내 코드에 표시)를 보여주는 플롯이 실제 값 (클러스터 번호 및 변수 이름)과 어떻게 관련 될 수 있습니까?

업데이트 : 이제 clusplot()함수가 PCA1 및 PCA2의 이변 량 플롯 이라는 것을 알고 있습니다. 그러나 PCA 구성 요소와 클러스터 그룹 간의 링크를 이해하지 못합니다. PCA 값과 클러스터링 그룹 간의 관계는 무엇입니까? kmeans와 PCA 사이의 링크에 대한 다른 곳을 읽었지만 여전히 동일한 이중 변수 그래프에 표시하는 방법을 이해하지 못합니다.


지난 며칠 동안 클러스터링에 대해 너무 많은 질문을 한 경우 사과드립니다. 나는 빨리이 분야에 익숙해지면하기 위해 노력하고있어 (또한 나는, SO에이 질문을 게시 않았다 stackoverflow.com/questions/4997870/... 하지만 여기 이동하는 제안했다)
celenius

괜찮습니다. 이것은 TCS.SE가 아닙니다 (-;

# 군집 수 결정 왜이 공식 (mydata, 2, var)을 사용하고 왜 2:15인지 설명 할 수 있습니까?

답변:


8

나는 질문 1을 완전히 이해하지 못했지만 답을 시도 할 것입니다. Q1의 도표는 군집 수가 변경됨에 따라 제곱합 (wss)이 어떻게 변하는지를 보여줍니다. 이런 종류의 플롯에서 그래프에서 꼬임을 찾아야합니다. 5의 꼬임은 5 개의 군집을 사용하는 것이 좋습니다.

WSS는 다음과 같은 의미에서 변수와 관계가 있습니다. WSS의 공식은

제이엑스나는제이||엑스나는μ제이||2

어디 클러스터에 대한 평균 포인트입니다 와 는 IS 번째 관찰. 클러스터 j를 로 나타냅니다 . WSS는 때때로 "각 클러스터 내부의 점이 얼마나 유사한가"로 해석됩니다. 이 유사성은 변수를 나타냅니다. j x i i C jμ제이제이엑스나는나는제이

질문 2에 대한 답은 이것입니다. 당신이 실제로보고 clusplot()있는 것은 주 평면에서의 관측치입니다. 이 함수가 수행하는 것은 각 관측치의 주요 성분 점수를 계산하여 해당 점수를 표시하고 군집별로 채색하는 것입니다.

주성분 분석 (PCA)은 치수 축소 기술입니다. 모든 변수의 정보를 구성 요소라고하는 몇 가지 "새"변수로 "요약"합니다. 각 구성 요소는 총 변동성의 특정 백분율을 설명합니다. 이 예에서 "이 두 구성 요소는 총 변동성의 73.95 %를 설명합니다"를 읽습니다.

이 기능 clusplot()은 클러스터링의 효과를 식별하는 데 사용됩니다. 성공적인 군집이있는 경우 군집이 군집에서 명확하게 분리되어 있음을 알 수 있습니다. 반면 클러스터링에 실패하면 주 평면에 클러스터가 병합 된 것을 볼 수 있습니다.

주요 구성 요소 분석에 대한 자세한 내용은 위키를 참조하십시오. Izenmann의 Modern Multivariate Techniques를 제안하는 책을 원한다면 PCA와 k-means를 찾을 수 있습니다.

도움이 되었기를 바랍니다 :)


1
답변 주셔서 감사합니다. clusplot()기능 에 대해 하나 더 질문했습니다 . PCA 값과 클러스터링 그룹 사이의 관계는 무엇입니까? kmeans와 PCA 사이의 링크에 대한 다른 곳을 읽었지만 여전히 동일한 이중 변수 그래프에 표시 할 수있는 방법을 이해하지 못합니다. (아마도 이것은 그 자체로 새로운 질문이어야합니다).
celenius

2
실제로 PCA 값과 클러스터링 그룹은 독립적입니다. PCA는의 각 관측치에 대해 "새"좌표를 작성합니다 mydata. 즉, 실제로 플롯에 표시됩니다. 점의 모양은의 fit$cluster두 번째 매개 변수 인을 사용하여 플로팅됩니다 clusplot(). PCA에 대해 더 자세히 살펴 봐야 할 것입니다. 이것이 도움이되었는지 또는 추가 참조 사항이 있으면 알려주십시오.
deps_stats

1
도움이됩니다 (내 문제에 기대하고 있음을 의미합니다!). fit$clusterPCA "좌표"와 어떤 관련이 있습니까? PCA의 작동 방식을 이해한다고 생각하지만 이해하기 때문에 각 구성 요소는 원래 데이터의 변수를 사용하여 설명 할 수 없으며 (원시 데이터의 선형 조합 임), 어떻게 그것이 가능한지 이해할 수 없습니다. 클러스터와 관련이 있습니다.
celenius

2
당신은 거의 그것을 얻었습니다 :) fit$clusterPCA와 관련이 없습니다. 어떤 clusplot()일은 "새로운"좌표를 사용하여 포인트를 플롯 및 사용하여 레이블을하는 것입니다 fit$cluster. 클러스터 3의 경우 '+', 클러스터 1의 경우 'o', 클러스터 2의 삼각형이 있습니다.이 기능 clusplot()은 클러스터링을 시각화하는 데 유용합니다.
deps_stats

1
"새로운"좌표는 PCA1과 PCA2를 의미합니다. 당신 맞아요, 그들은 완전히 관련이없는 fit$cluster:) 것은
deps_stats
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.