Skip to content

Releases: jungseokyoung-cloud/Clustering

v2.0.0

21 Apr 09:10

Choose a tag to compare

  • KMedoids 클러스터링 추가 (FasterPAM 적용)
  • 실루엣 지수, DBI 다양한 평가지표 제공

v1.0.1

09 Nov 07:54

Choose a tag to compare

v1.0.1

Clustering Update 로직

  • 이전 시간복잡도 : $O(KN^2)$
  • 현재 시간복잡도: $O(KN)$

이전 로직

clusters.forEach { cluster in
	cluster.group.allValues()
		.map { ($0, neareastCluster(from: $0)) }
		.filter { cluster != $1 }
		.forEach {
			isChanged = true
			$1.insert($0)
			cluster.remove($0)
		}
}

Update Logic : $O(N^2)$

  • 모든 점들 순회 : $O(N)$
  • LinkedList 삭제 : $O(N)$

변경된 로직

clusters.forEach { cluster in
	if isChanged { return }
	
	self.isChanged = isChanged(cluster: cluster)
}

// Cluster의 데이터 이동이 있으면, Cluster를 재생성합니다.
if isChanged {
	self.clusters = generateClusters(centroids: centroids)
	classifyDataToNearestCluster()
}

New Logic: $O(N)$

  • 현재 속한 클러스터와 가장 가까운 클러스터가 다르다면,
  • data를 이동하는 것이 아닌, 클러스터 재생성

Validation Method 변경

  • Davies-Boldin-Index 로직에서 Silhouette Coefficient로 변경

Davies-Boldin-Index에서 Cluster가 갯수가 2에서 Optimal하다고 나오는 경우 존재.

동일한 데이터셋으로 테스트 진행

Davies-Boldin-Index

클러스터링 이전 클러스터링 이후1 클러스터링 이후2

Silhouette Coefficient

클러스터링 이전 클러스터링 이후1 클러스터링 이후2

초기 Centroid 로직

기존 방법은 비율을 통해서 centroid 결정하며, 첫번째 데이터는 무조건 Centroid로 지정
Random과 거리가 멀다 판단하여 아예 랜덤하게 선택하도록 로직 변경

v1.0.0

06 Nov 08:53

Choose a tag to compare

v1.0.0 release