Agglomerative clustering Operator


Operator 설명

  1. 먼저 거리가 가장 가까운 것을 하나의 클러스터로 묶게 된다.
  2. 그 다음 또 다시 가장 가까운 것을 묶게 된다.
  3. 이런 식으로 모든 데이터가 하나로 묶을 때까지 반복 수행을 하게 된다.
    • 만약 2개의 클러스터로 나누고 싶다면 아래와 같이 할당하면 된다.
    • 거리계산 할 때의 사용된 방법에는 Single link, Complete link, Average link 방식을 사용하게 된다.

      Single link 방식은 클러스터 간의 최소 거리로 측정하게 된다.

      Complete link 방식은 클러스터 간의 최대 거리로 측정하게 된다.

      Average link 방식은 모든 점과의 거리를 평균 내 측정하게 된다.

Operator 파라미터 설명

작동 순서

  1. 입력 DataFrame의 유효성 검사를 진행한다. (cluster 개수, Numeric Columns)
  2. 변수 초기화를 한다. (remaining, clusterMap)
  3. 가장 거리가 가까운 것을 시작위치로 설정한다.
  4. 거리를 계산하여 근접한 cluster는 병합되어 하나의 cluster로 생성이 되어간다.
  5. cluster의 개수가 맞을 때까지 반복진행을 한다.
  6. 출력 DataFrame을 생성한다.

Operator 모듈 테스트 결과

입력 데이터

data1 data2 data3 data4 data5
91.5775 81.572 84 73.2035 79.5918
83.4467 72.9477 92 60.6273 75.1917
47.0239 51.3076 31 25.807 36.0382
69.9559 61.0005 76 76.643 71.2145
57.2462 53.9258 79 65.2266 66.0508
42.8488 46.1728 7 31.9797 28.3842
73.7949 64.0751 98 61.2696 74.4483
22.4626 31.7166 6 28.549 22.0886

결과 데이터

data1 data2 data3 data4 data5 CLUSTER
91.5775 81.572 84 73.2035 79.5918 2
83.4467 72.9477 92 60.6273 75.1917 2
47.0239 51.3076 31 25.807 36.0382 0
69.9559 61.0005 76 76.643 71.2145 1
57.2462 53.9258 79 65.2266 66.0508 1
42.8488 46.1728 7 31.9797 28.3842 0
73.7949 64.0751 98 61.2696 74.4483 2
22.4626 31.7166 6 28.549 22.0886 0
val agglomerativeClusteringInfo = AgglomerativeClusteringInfo.newBuilder()
  .setNumberOfClusters(3)
  .setLink(LinkType.SINGLE)
  .build