// ignore_for_file: file_names import 'dart:math'; class PerhitunganKNN { List> features; List labels; PerhitunganKNN(this.features, this.labels); Map classify(List newPoint, int k) { List> distances = []; // Hitung jarak dari newPoint ke setiap titik dalam features for (int i = 0; i < features.length; i++) { double dist = euclideanDistance(features[i], newPoint); distances.add({'index': i, 'distance': dist}); } // Urutkan berdasarkan jarak distances.sort((a, b) => a['distance'].compareTo(b['distance'])); // Pilih K tetangga terdekat Map votes = {}; List nearestNeighbors = []; for (int i = 0; i < k; i++) { String label = labels[distances[i]['index']]; nearestNeighbors.add(label); votes[label] = votes.containsKey(label) ? votes[label]! + 1 : 1; } // Tentukan mayoritas kelas dari K tetangga terdekat String majorityLabel = votes.entries.reduce((a, b) => a.value > b.value ? a : b).key; return { 'result': majorityLabel, 'nearestNeighbors': nearestNeighbors, 'distances': distances }; } double euclideanDistance(List p1, List p2) { double sum = 0.0; for (int i = 0; i < p1.length; i++) { sum += pow((p1[i] - p2[i]), 2); } return sqrt(sum); } }