R에서 elbow 방법을 사용하여 최적의 클러스터를 찾는 방법


기계 학습 에서 가장 일반적으로 사용되는 클러스터링 알고리즘 중 하나는 k-평균 클러스터링 으로 알려져 있습니다.

K-평균 클러스터링은 데이터 세트의 각 관측치를 K 클러스터 중 하나에 배치하는 기술입니다.

최종 목표는 각 클러스터 내의 관측치가 서로 매우 유사한 반면 다른 클러스터의 관측치는 서로 상당히 다른 K 개의 클러스터를 갖는 것입니다.

k-평균 군집화를 수행할 때 첫 번째 단계는 관측값을 배치하려는 군집 수인 K 값을 선택하는 것입니다.

K 값을 선택하는 가장 일반적인 방법 중 하나는 엘보우 방법(elbow method) 으로, x축에 클러스터 수를, y축에 제곱합의 합계를 사용하여 플롯을 만든 다음 다음을 식별합니다. 플롯에 “무릎” 또는 회전이 나타나는 곳입니다.

“무릎”이 발생하는 x축 지점은 k-평균 클러스터링 알고리즘에 사용할 최적의 클러스터 수를 알려줍니다.

다음 예제에서는 R에서 팔꿈치 방법을 사용하는 방법을 보여줍니다.

예: R에서 팔꿈치 방법 사용

이 예에서는 R에 내장된 USArrests 데이터세트를 사용합니다. 이 데이터세트에는 1973년 미국 각 주에서 100,000명당 살인, 폭행, 강간으로 체포된 건수와 각 주의 도시 인구 비율이 포함되어 있습니다. 지역. , 어반팝.

다음 코드는 데이터세트를 로드하고, 누락된 값이 있는 행을 제거하고, 평균이 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

k-평균 알고리즘에 사용할 최적의 클러스터 수를 찾기 위해 Factoextra 패키지의 fviz_nbclust() 함수를 사용하여 클러스터 수 대 제곱합의 총계에 대한 플롯을 만듭니다.

 library (cluster)
library (factoextra)

#create plot of number of clusters vs total within sum of squares
fviz_nbclust(df, kmeans, method = “ wss ”) 

R-벤드 방법

이 그래프에서는 k = 4개의 클러스터에 “무릎” 또는 꼬임이 있는 것으로 나타납니다. 이 지점은 제곱합의 합계가 안정화되기 시작하는 지점입니다.

이는 k-평균 알고리즘에 사용할 최적의 클러스터 수가 4임을 알려줍니다.

참고 : 더 많은 클러스터를 사용하면 제곱합에서 더 낮은 총계를 얻을 수 있지만 훈련 데이터에 과적합될 가능성이 높 으므로 k-평균 알고리즘이 테스트 데이터에서 잘 작동하지 않습니다.

클러스터 패키지의 kmeans() 함수를 사용하면 k /4에 대한 최적 값을 사용하여 데이터세트에서 k-평균 클러스터링을 수행할 수 있습니다.

 #make this example reproducible
set. seeds (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 개 주가 네 번째 클러스터에 할당되었습니다.

각 주의 클러스터 할당을 원본 데이터세트에 추가할 수도 있습니다.

 #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

원본 데이터베이스의 각 관찰은 네 그룹 중 하나에 배치되었습니다.

추가 리소스

다음 튜토리얼은 R에서 다양한 클러스터링 알고리즘을 실행하는 방법에 대한 단계별 예제를 제공합니다.

R의 K-평균 군집화: 단계별 예
R의 K-Medoids 클러스터링: 단계별 예
R의 계층적 클러스터링: 단계별 예

의견을 추가하다

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