fit method
Implementation
List<int> fit(List<List<double>> X) {
final n = X.length;
if (n == 0) return [];
final labels = List<int>.filled(n, 0);
var clusterId = 0;
final epsSq = eps * eps;
for (var i = 0; i < n; i++) {
if (labels[i] != 0) continue;
final neigh = _regionQuery(X, i, epsSq);
if (neigh.length < minPts) {
labels[i] = -1; // noise
continue;
}
clusterId++;
labels[i] = clusterId;
final seeds = List<int>.from(neigh.where((p) => p != i));
while (seeds.isNotEmpty) {
final cur = seeds.removeAt(0);
if (labels[cur] == -1) labels[cur] = clusterId;
if (labels[cur] != 0) continue;
labels[cur] = clusterId;
final curNeigh = _regionQuery(X, cur, epsSq);
if (curNeigh.length >= minPts) {
for (var p in curNeigh) {
if (!seeds.contains(p)) seeds.add(p);
}
}
}
}
return labels;
}