R의 k-medoids: 단계별 예


클러스터링은 데이터 세트 내에서 관찰 그룹 또는 클러스터를 찾으려고 시도하는 기계 학습 기술입니다.

목표는 각 군집 내의 관측값이 서로 매우 유사한 반면, 다른 군집의 관측값은 서로 상당히 다른 군집을 찾는 것입니다.

클러스터링은 비지도 학습 의 한 형태입니다 . 응답 변수 의 값을 예측하는 것이 아니라 단순히 데이터 세트 내에서 구조를 찾으려고 하기 때문입니다.

클러스터링은 기업이 다음과 같은 정보에 액세스할 수 있는 경우 마케팅에 자주 사용됩니다.

  • 가구 소득
  • 가구 규모
  • 세대주 직업
  • 가장 가까운 도시 지역까지의 거리

이 정보를 사용할 수 있으면 클러스터링을 사용하여 유사하고 특정 제품을 구매할 가능성이 높거나 특정 유형의 광고에 더 잘 반응할 수 있는 가구를 식별할 수 있습니다.

클러스터링의 가장 일반적인 형태 중 하나는 k-평균 클러스터링 으로 알려져 있습니다.

불행하게도 이 방법은 이상값의 영향을 받을 수 있으므로 k-medoids 클러스터링이 자주 사용되는 대안입니다.

K-Medoids 클러스터링이란 무엇입니까?

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

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

실제로 K-평균 클러스터링을 수행하기 위해 다음 단계를 사용합니다.

1. K 값을 선택합니다.

  • 먼저, 데이터에서 식별하려는 클러스터 수를 결정해야 합니다. 종종 우리는 K 에 대해 여러 가지 다른 값을 테스트하고 결과를 분석하여 주어진 문제에 가장 적합한 클러스터 수를 확인해야 합니다.

2. 각 관측치를 1부터 K 까지 초기 클러스터에 무작위로 할당합니다.

3. 클러스터 할당 변경이 중지될 때까지 다음 절차를 수행합니다.

  • K 개의 클러스터 각각에 대해 클러스터의 무게 중심을 계산합니다. 이는 k 번째 클러스터의 관측값에 대한 특징의 p개의 중앙값 으로 구성된 벡터입니다.
  • 중심이 가장 가까운 클러스터에 각 관측치를 할당합니다. 여기서 가장 가까운 것은 유클리드 거리를 사용하여 정의됩니다.

기술 노트:

k-medoids는 평균이 아닌 중앙값을 사용하여 군집 중심을 계산하므로 k-평균보다 이상값에 더 강력한 경향이 있습니다.

실제로 데이터 세트에 극단적인 이상값이 없으면 k-평균과 k-medoids는 유사한 결과를 생성합니다.

R의 K-Medoids 클러스터링

다음 튜토리얼에서는 R에서 k-medoids 클러스터링을 수행하는 방법에 대한 단계별 예를 제공합니다.

1단계: 필요한 패키지 로드

먼저 R의 k-medoids 클러스터링에 대한 몇 가지 유용한 기능이 포함된 두 개의 패키지를 로드합니다.

 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-medoid 클러스터링을 수행하려면 “중앙값을 중심으로 분할”을 의미하고 다음 구문을 사용하는 pam() 함수를 사용할 수 있습니다.

pam(data, k, 메트릭 = “유클리드”, 스탠드 = FALSE)

금:

  • 데이터: 데이터 세트의 이름입니다.
  • k: 클러스터 수입니다.
  • 미터법: 거리를 계산하는 데 사용할 미터법입니다. 기본값은 Euclidean 이지만 manhattan 을 지정할 수도 있습니다.
  • 스탠드: 데이터 세트의 각 변수를 정규화할지 여부입니다. 기본값은 false입니다.

최적의 클러스터 수를 미리 알 수 없으므로 결정하는 데 도움이 될 수 있는 두 가지 그래프를 만듭니다.

1. 전체 제곱합에 대한 클러스터 수

먼저 fviz_nbclust() 함수를 사용하여 클러스터 수와 제곱합의 합계에 대한 플롯을 만듭니다.

 fviz_nbclust(df, pam, method = “ wss ”) 

k-medoid를 위한 최적의 클러스터

제곱합의 합계는 일반적으로 클러스터 수를 늘리면 항상 증가합니다. 따라서 이러한 유형의 플롯을 만들 때 제곱합이 “구부러지거나” 수평을 이루기 시작하는 “무릎”을 찾습니다.

플롯의 곡률 지점은 일반적으로 최적의 클러스터 수에 해당합니다. 이 수치를 넘어서면 과적합이 발생할 가능성이 높습니다.

이 그래프의 경우 k = 4개 클러스터에 작은 꼬임 또는 “굴곡”이 있는 것으로 나타납니다.

2. 군집 수와 격차 통계

최적의 클러스터 수를 결정하는 또 다른 방법은 다양한 k 값에 대한 전체 클러스터 내 변동을 클러스터링이 없는 분포에 대한 예상 값과 비교하는 편차 통계 라는 측정항목을 사용하는 것입니다.

클러스터 패키지의 clusGap() 함수를 사용하여 각 클러스터 수에 대한 간격 통계를 계산할 수 있을 뿐만 아니라 fviz_gap_stat() 함수를 사용하여 클러스터 대 간격 통계의 플롯을 계산할 수 있습니다.

 #calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
                    FUN = pam,
                    K.max = 10, #max clusters to consider
                    B = 50) #total bootstrapped iterations

#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat) 

K-medoids R의 최적 클러스터 수

그래프에서 간격 통계는 k = 4 클러스터에서 가장 높다는 것을 알 수 있으며 이는 이전에 사용한 팔꿈치 방법에 해당합니다.

4단계: Optimal K를 사용하여 K-Medoids 클러스터링 수행

마지막으로 k -4에 대한 최적 값을 사용하여 데이터 세트에서 k-medoids 클러스터링을 수행할 수 있습니다.

 #make this example reproducible
set.seed(1)

#perform k-medoids clustering with k = 4 clusters
kmed <- pam(df, k = 4)

#view results
kmed

              ID Murder Assault UrbanPop Rape
Alabama 1 1.2425641 0.7828393 -0.5209066 -0.003416473
Michigan 22 0.9900104 1.0108275 0.5844655 1.480613993
Oklahoma 36 -0.2727580 -0.2371077 0.1699510 -0.131534211
New Hampshire 29 -1.3059321 -1.3650491 -0.6590781 -1.252564419
Vector clustering:
       Alabama Alaska Arizona Arkansas California 
             1 2 2 1 2 
      Colorado Connecticut Delaware Florida Georgia 
             2 3 3 2 1 
        Hawaii Idaho Illinois Indiana Iowa 
             3 4 2 3 4 
        Kansas Kentucky Louisiana Maine Maryland 
             3 3 1 4 2 
 Massachusetts Michigan Minnesota Mississippi Missouri 
             3 2 4 1 3 
       Montana Nebraska Nevada New Hampshire New Jersey 
             3 3 2 4 3 
    New Mexico New York North Carolina North Dakota Ohio 
             2 2 1 4 3 
      Oklahoma Oregon Pennsylvania Rhode Island South Carolina 
             3 3 3 3 1 
  South Dakota Tennessee Texas Utah Vermont 
             4 1 2 3 4 
      Virginia Washington West Virginia Wisconsin Wyoming 
             3 3 4 4 3 
Objective function:
   build swap 
1.035116 1.027102 

Available components:
 [1] "medoids" "id.med" "clustering" "objective" "isolation" 
 [6] "clusinfo" "silinfo" "diss" "call" "data"          

4개의 클러스터 중심은 모두 데이터 세트의 실제 관측치입니다. 출력 상단 근처에서 4개의 중심이 다음과 같은 상태임을 확인할 수 있습니다.

  • 앨라배마
  • 미시간
  • 오클라호마
  • 뉴햄프셔

fivz_cluster() 함수를 사용하여 축에 처음 두 개의 주성분을 표시하는 산점도에서 클러스터를 시각화할 수 있습니다.

 #plot results of final k-medoids model
fviz_cluster(kmed, data = df)

R에 k-medoid 클러스터 플로팅

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

 #add cluster assignment to original data
final_data <- cbind(USArrests, cluster = kmed$cluster)

#view final data
head(final_data)

           Murder Assault UrbanPop Rape cluster
Alabama 13.2 236 58 21.2 1
Alaska 10.0 263 48 44.5 2
Arizona 8.1 294 80 31.0 2
Arkansas 8.8 190 50 19.5 1
California 9.0 276 91 40.6 2
Colorado 7.9 204 78 38.7 2

이 예제에 사용된 전체 R 코드는 여기에서 찾을 수 있습니다.

의견을 추가하다

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