KNN

Run Settings
LanguageC++
Language Version
Run Command
include <iostream> #include <vector> #include <cmath> #include <algorithm> // Struktur untuk menyimpan data titik dan label struct DataPoint { std::vector<double> features; int label; }; // Fungsi untuk menghitung jarak Euclidean antara dua titik double euclideanDistance(const std::vector<double>& a, const std::vector<double>& b) { double sum = 0.0; for (size_t i = 0; i < a.size(); ++i) { sum += (a[i] - b[i]) * (a[i] - b[i]); } return std::sqrt(sum); } // Fungsi untuk melakukan KNN dan mengembalikan label prediksi int knnClassify(const std::vector<DataPoint>& trainingData, const std::vector<double>& testPoint, int k) { std::vector<std::pair<double, int>> distances; // Hitung jarak dari titik uji ke setiap titik data latih for (const auto& point : trainingData) { double dist = euclideanDistance(testPoint, point.features); distances.push_back({dist, point.label}); } // Urutkan jarak dari yang terkecil ke yang terbesar std::sort(distances.begin(), distances.end(), [](const std::pair<double, int>& a, const std::pair<double, int>& b) { return a.first < b.first; }); // Hitung frekuensi label dari k tetangga terdekat std::vector<int> labelCount(10, 0); // Anggap kita memiliki 10 label for (int i = 0; i < k; ++i) { labelCount[distances[i].second]++; } // Temukan label dengan frekuensi tertinggi int maxCount = 0; int predictedLabel = -1; for (int i = 0; i < labelCount.size(); ++i) { if (labelCount[i] > maxCount) { maxCount = labelCount[i]; predictedLabel = i; } } return predictedLabel; } int main() { // Contoh data pelatihan std::vector<DataPoint> trainingData = { {{1.0, 2.0}, 0}, {{2.0, 3.0}, 0}, {{3.0, 3.0}, 1}, {{4.0, 5.0}, 1}, {{5.0, 5.0}, 1} }; // Titik uji std::vector<double> testPoint = {3.5, 4.0}; // Jumlah tetangga terdekat int k = 3; // Lakukan klasifikasi int predictedLabel = knnClassify(trainingData, testPoint, k); std::cout << "Prediksi label: " << predictedLabel << std::endl; return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines