run method

List<List<int>> run(
  1. List<List<double>> dataset
)

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;
}