knnPredict function

int knnPredict(
  1. List<List<double>> X,
  2. List<int> y,
  3. List<double> q,
  4. int k,
)

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