run method
Run clustering process and returns list of cluster
Implementation
List<List<int>> run(List<List<double>> dataset) {
this.dataset = dataset;
///Initial configuration before running process
buildDistanceMatrix();
_cache = {};
_cluster = [];
//for every dataset, add it into their own cluster
for (int i = 0; i < dataset.length; i++) {
_cluster.add([i]);
}
//add first level
Level currentLevel = Level(cluster: _cluster);
_level = [currentLevel];
while (_cluster.length > minCluster && currentLevel.linkage < maxLinkage) {
currentLevel = mergeCluster();
}
//add other info
_label = List.generate(dataset.length, (_) => -1);
_noise = [];
int currentLabel = 0;
for (int i = 0; i < _cluster.length; i++) {
if (_cluster[i].length > 1) {
for (int j = 0; j < _cluster[i].length; j++) {
_label[_cluster[i][j]] = currentLabel;
}
currentLabel++;
} else {
//if a cluster contain one member, consider it as noise
_noise.add(_cluster[i][0]);
}
}
return _cluster;
}