Releases: jungseokyoung-cloud/Clustering
Releases · jungseokyoung-cloud/Clustering
v2.0.0
v1.0.1
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)$ - 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:
- 현재 속한 클러스터와 가장 가까운 클러스터가 다르다면,
- 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
v1.0.0 release




