mergeCluster method
Merging two clusters.
This is a process done for every hierarchical clustering level.
Implementation
Level mergeCluster() {
MinLinkage? min;
for (int i = 0; i < _cluster.length; i++) {
for (int j = 0; j < i; j++) {
double linkage = getLinkage(_cluster[i], _cluster[j]);
if (min == null || linkage < min.linkage) {
min = MinLinkage(i: i, j: j, linkage: linkage);
}
}
}
//create new cluster from old cluster (deep copy)
List<List<int>> cluster = _cluster
.map((oneClus) => oneClus.map((index) => index).toList())
.toList();
//join cluster index j into i
cluster[min!.i].addAll(cluster[min.j]);
//and remove cluster index j
cluster.removeAt(min.j);
Level currentLevel = Level(
linkage: min.linkage, cluster: cluster, joinFrom: min.j, joinTo: min.i);
_level.add(currentLevel);
_cluster = cluster;
return currentLevel;
}