knnPredict function
Implementation
int knnPredict(List<List<double>> X, List<int> y, List<double> q, int k) {
final n = X.length;
if (n == 0) throw ArgumentError('Empty training set');
final dists = <MapEntry<double, int>>[];
for (var i = 0; i < n; i++) {
dists.add(MapEntry(_euclidean(X[i], q), y[i]));
}
dists.sort((a, b) => a.key.compareTo(b.key));
final counts = <int, int>{};
for (var i = 0; i < k && i < dists.length; i++) {
counts[dists[i].value] = (counts[dists[i].value] ?? 0) + 1;
}
return counts.entries.reduce((a, b) => a.value >= b.value ? a : b).key;
}