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-평균 클러스터링의 최적 클러스터 수

일반적으로 이러한 유형의 플롯을 생성할 때 제곱합이 “구부러지거나” 수평을 이루기 시작하는 “무릎”을 찾습니다. 이는 일반적으로 최적의 클러스터 수입니다.

이 그래프의 경우 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)

K-는 R의 클러스터링 플롯을 의미합니다.

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 코드는 여기에서 찾을 수 있습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다