R의 k-평균 군집화: 단계별 예
클러스터링은 데이터 세트 내에서 관찰 그룹을 찾으려고 시도하는 기계 학습 기술입니다.
목표는 각 군집 내의 관측값이 서로 매우 유사한 반면, 다른 군집의 관측값은 서로 상당히 다른 군집을 찾는 것입니다.
클러스터링은 비지도 학습 의 한 형태입니다 . 응답 변수 의 값을 예측하는 것이 아니라 단순히 데이터 세트 내에서 구조를 찾으려고 하기 때문입니다.
클러스터링은 기업이 다음과 같은 정보에 액세스할 수 있는 경우 마케팅에 자주 사용됩니다.
- 가구 소득
- 가구 규모
- 세대주 직업
- 가장 가까운 도시 지역까지의 거리
이 정보를 사용할 수 있으면 클러스터링을 사용하여 유사하고 특정 제품을 구매할 가능성이 높거나 특정 유형의 광고에 더 잘 반응할 수 있는 가구를 식별할 수 있습니다.
클러스터링의 가장 일반적인 형태 중 하나는 k-평균 클러스터링 으로 알려져 있습니다.
K-평균 클러스터링이란 무엇입니까?
K-평균 클러스터링은 데이터 세트의 각 관측치를 K 클러스터 중 하나에 배치하는 기술입니다.
최종 목표는 각 클러스터 내의 관측치가 서로 매우 유사한 반면 다른 클러스터의 관측치는 서로 상당히 다른 K 개의 클러스터를 갖는 것입니다.
실제로 K-평균 클러스터링을 수행하기 위해 다음 단계를 사용합니다.
1. K 값을 선택합니다.
- 먼저, 데이터에서 식별하려는 클러스터 수를 결정해야 합니다. 종종 우리는 K 에 대해 여러 가지 다른 값을 테스트하고 결과를 분석하여 주어진 문제에 가장 적합한 클러스터 수를 확인해야 합니다.
2. 각 관측치를 1부터 K 까지 초기 클러스터에 무작위로 할당합니다.
3. 클러스터 할당 변경이 중지될 때까지 다음 절차를 수행합니다.
- K 개의 클러스터 각각에 대해 클러스터의 무게 중심을 계산합니다. 이것은 단순히 k번째 클러스터의 관측값에 대한 p- 평균 특징의 벡터입니다.
- 중심이 가장 가까운 클러스터에 각 관측치를 할당합니다. 여기서 가장 가까운 것은 유클리드 거리를 사용하여 정의됩니다.
R의 K-평균 클러스터링
다음 튜토리얼에서는 R에서 k-평균 클러스터링을 수행하는 방법에 대한 단계별 예를 제공합니다.
1단계: 필요한 패키지 로드
먼저 R의 k-평균 클러스터링에 대한 몇 가지 유용한 기능이 포함된 두 개의 패키지를 로드합니다.
library (factoextra) library (cluster)
2단계: 데이터 로드 및 준비
이 예에서는 R에 내장된 USArrests 데이터세트를 사용합니다. 여기에는 1973년 미국 각 주에서 살인 , 폭행 , 강간 으로 체포된 건수와 도시에 거주하는 각 주의 인구 비율이 포함되어 있습니다. 지역. , 어반팝 .
다음 코드는 다음 작업을 수행하는 방법을 보여줍니다.
- USArrests 데이터 세트 로드
- 누락된 값이 있는 모든 행을 제거합니다.
- 평균이 0이고 표준편차가 1이 되도록 데이터 세트의 각 변수를 조정합니다.
#load data df <-USArrests #remove rows with missing values df <- na. omitted (df) #scale each variable to have a mean of 0 and sd of 1 df <- scale(df) #view first six rows of dataset head(df) Murder Assault UrbanPop Rape Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473 Alaska 0.50786248 1.1068225 -1.2117642 2.484202941 Arizona 0.07163341 1.4788032 0.9989801 1.042878388 Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602 California 0.27826823 1.2628144 1.7589234 2.067820292 Colorado 0.02571456 0.3988593 0.8608085 1.864967207
3단계: 최적의 클러스터 수 찾기
R에서 k-평균 클러스터링을 수행하려면 다음 구문을 사용하는 내장 kmeans() 함수를 사용할 수 있습니다.
kmeans(데이터, 센터, nstart)
금:
- 데이터: 데이터 세트의 이름입니다.
- 센터: k 로 표시되는 클러스터 수입니다.
- nstart: 초기 구성 수입니다. 초기 시작 클러스터가 다르면 결과도 달라질 수 있으므로 여러 가지 초기 구성을 사용하는 것이 좋습니다. k-평균 알고리즘은 클러스터 내에서 가장 작은 변동으로 이어지는 초기 구성을 찾습니다.
최적의 클러스터 수를 미리 알 수 없으므로 결정하는 데 도움이 될 수 있는 두 가지 그래프를 만듭니다.
1. 전체 제곱합에 대한 클러스터 수
먼저 fviz_nbclust() 함수를 사용하여 클러스터 수와 제곱합의 합계에 대한 플롯을 만듭니다.
fviz_nbclust(df, kmeans, method = “ wss ”)

일반적으로 이러한 유형의 플롯을 생성할 때 제곱합이 “구부러지거나” 수평을 이루기 시작하는 “무릎”을 찾습니다. 이는 일반적으로 최적의 클러스터 수입니다.
이 그래프의 경우 k = 4개 클러스터에 작은 꼬임 또는 “굴곡”이 있는 것으로 나타납니다.
2. 군집 수와 격차 통계
최적의 클러스터 수를 결정하는 또 다른 방법은 다양한 k 값에 대한 전체 클러스터 내 변동을 클러스터링이 없는 분포에 대한 예상 값과 비교하는 편차 통계 라는 측정항목을 사용하는 것입니다.
클러스터 패키지의 clusGap() 함수를 사용하여 각 클러스터 수에 대한 간격 통계를 계산할 수 있을 뿐만 아니라 fviz_gap_stat() 함수를 사용하여 간격 통계에 대해 클러스터를 그릴 수 있습니다.
#calculate gap statistic based on number of clusters gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, K.max = 10, B = 50) #plot number of clusters vs. gap statistic fviz_gap_stat(gap_stat)

그래프에서 간격 통계는 k = 4 클러스터에서 가장 높다는 것을 알 수 있으며 이는 이전에 사용한 팔꿈치 방법에 해당합니다.
4단계: 최적 K를 사용하여 K-평균 군집화 수행
마지막으로 k -4에 대한 최적 값을 사용하여 데이터 세트에서 k-평균 클러스터링을 수행할 수 있습니다.
#make this example reproducible set.seed(1) #perform k-means clustering with k = 4 clusters km <- kmeans(df, centers = 4, nstart = 25) #view results km K-means clustering with 4 clusters of sizes 16, 13, 13, 8 Cluster means: Murder Assault UrbanPop Rape 1 -0.4894375 -0.3826001 0.5758298 -0.26165379 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331 3 0.6950701 1.0394414 0.7226370 1.27693964 4 1.4118898 0.8743346 -0.8145211 0.01927104 Vector clustering: Alabama Alaska Arizona Arkansas California Colorado 4 3 3 4 3 3 Connecticut Delaware Florida Georgia Hawaii Idaho 1 1 3 4 1 2 Illinois Indiana Iowa Kansas Kentucky Louisiana 3 1 2 1 2 4 Maine Maryland Massachusetts Michigan Minnesota Mississippi 2 3 1 3 2 4 Missouri Montana Nebraska Nevada New Hampshire New Jersey 3 2 2 3 2 1 New Mexico New York North Carolina North Dakota Ohio Oklahoma 3 3 4 2 1 1 Oregon Pennsylvania Rhode Island South Carolina South Dakota Tennessee 1 1 1 4 2 4 Texas Utah Vermont Virginia Washington West Virginia 3 1 2 1 1 2 Wisconsin Wyoming 2 1 Within cluster sum of squares by cluster: [1] 16.212213 11.952463 19.922437 8.316061 (between_SS / total_SS = 71.2%) Available components: [1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss" [7] "size" "iter" "ifault"
결과에서 우리는 다음을 알 수 있습니다.
- 16개 주가 첫 번째 클러스터에 할당되었습니다.
- 두 번째 클러스터에는 13 개 주가 할당되었습니다.
- 세 번째 클러스터에는 13 개 주가 할당되었습니다.
- 8 개 주가 네 번째 클러스터에 할당되었습니다.
fivz_cluster() 함수를 사용하여 축에 처음 두 개의 주성분을 표시하는 산점도에서 클러스터를 시각화할 수 있습니다.
#plot results of final k-means model
fviz_cluster(km, data = df)

Aggregate() 함수를 사용하여 각 클러스터의 변수 평균을 찾을 수도 있습니다.
#find means of each cluster
aggregate(USArrests, by= list (cluster=km$cluster), mean)
cluster Murder Assault UrbanPop Rape
1 3.60000 78.53846 52.07692 12.17692
2 10.81538 257.38462 76.00000 33.19231
3 5.65625 138.87500 73.87500 18.78125
4 13.93750 243.62500 53.75000 21.41250
이 출력을 다음과 같이 해석합니다.
- 그룹 1 주에서 시민 100,000명당 평균 살인 건수는 3.6건 입니다.
- 그룹 1 주에서 시민 100,000명당 평균 폭행 건수는 78.5건 입니다.
- 그룹 1 주 중 도시 지역에 거주하는 주민의 평균 비율은 52.1% 입니다.
- 그룹 1 주에서 시민 100,000명당 평균 강간 건수는 12.2 건입니다 .
등등.
각 주의 클러스터 할당을 원본 데이터세트에 추가할 수도 있습니다.
#add cluster assignment to original data
final_data <- cbind(USArrests, cluster = km$cluster)
#view final data
head(final_data)
Murder Assault UrbanPop Rape cluster
Alabama 13.2 236 58 21.2 4
Alaska 10.0 263 48 44.5 2
Arizona 8.1 294 80 31.0 2
Arkansas 8.8 190 50 19.5 4
California 9.0 276 91 40.6 2
Colorado 7.9 204 78 38.7 2
K-Means 클러스터링의 장점과 단점
K-평균 클러스터링은 다음과 같은 이점을 제공합니다.
- 빠른 알고리즘입니다.
- 대규모 데이터 세트를 잘 처리할 수 있습니다.
그러나 다음과 같은 잠재적인 단점이 있습니다.
- 이를 위해서는 알고리즘을 실행하기 전에 클러스터 수를 지정해야 합니다.
- 이상값에 민감합니다.
k-평균 클러스터링에 대한 두 가지 대안은 k-평균 클러스터링 과 계층적 클러스터링입니다.
이 예제에 사용된 전체 R 코드는 여기에서 찾을 수 있습니다.