Algoritma KNN di PHP
KNN atau K-Nearest Neighbors adalah salah satu algoritma machine learning yang digunakan untuk klasifikasi atau regresi data. Algoritma ini bekerja dengan mencari k-terdekat tetangga dari data yang sedang diprediksi, lalu mengambil mayoritas label tetangga tersebut sebagai label prediksi untuk data tersebut.
Contohnya, jika sebuah data memiliki 3 tetangga terdekat dengan label "A", "B", dan "A", maka label prediksi untuk data tersebut akan dianggap sebagai "A" karena mayoritas tetangga memiliki label "A".
KNN termasuk dalam jenis algoritma supervised learning dan sering digunakan dalam pengenalan pola, pengolahan citra, dan sistem rekomendasi. Algoritma ini relatif mudah diimplementasikan, tetapi kelemahannya adalah sensitif terhadap jumlah dimensi data dan dapat memakan waktu yang lama untuk menghitung jarak antara setiap data.
algoritma
-
Tentukan jumlah tetangga terdekat (k) yang akan digunakan. Langkah ini merupakan langkah persiapan dan k bisa dipilih sesuai dengan kebutuhan.
-
Hitung jarak antara data yang sedang diprediksi dengan setiap data pada dataset menggunakan rumus jarak Euclidean atau rumus jarak Manhattan. Rumus jarak Euclidean dan jarak Manhattan adalah dua jenis rumus yang sering digunakan untuk menghitung jarak antara data. Rumus jarak Euclidean didefinisikan sebagai akar kuadrat dari jumlah kuadrat selisih antara setiap fitur dari kedua data. Sedangkan rumus jarak Manhattan didefinisikan sebagai jumlah dari selisih absolut antara setiap fitur dari kedua data.
-
Pilih k tetangga terdekat dari data yang sedang diprediksi. K tetangga terdekat dipilih berdasarkan jarak terkecil dari data yang sedang diprediksi.
-
Tentukan mayoritas label dari k tetangga terdekat sebagai label prediksi untuk data yang sedang diprediksi. Label prediksi ditentukan berdasarkan mayoritas label dari k tetangga terdekat.
-
Kembalikan label prediksi. Label prediksi kemudian dikembalikan sebagai output dari algoritma KNN.
contoh kode PHP
// Data awal
$data_latih = array(
array(1, 2, 'A'),
array(2, 3, 'A'),
array(3, 4, 'B'),
array(4, 5, 'B'),
array(5, 6, 'B')
);
// Data uji
$data_uji = array(3, 3);
// tetangga terdekat
$k = 3;
// Hitung jarak data ke ke semua data awal
$jarak = array();
foreach ($data_latih as $data) {
$jarak[] = array(sqrt(pow($data[0] - $data_uji[0], 2) + pow($data[1] - $data_uji[1], 2)), $data[2]);
}
// Urutkan jarak dari terdekat ke terjauh
usort($jarak, function ($a, $b) {
return $a[0] - $b[0];
});
// Hitung kelas terbanyak dari K tetangga terdekat
$kelas = array();
for ($i = 0; $i < $k; $i++) {
$kelas[] = $jarak[$i][1];
}
$kelas_terbanyak = array_count_values($kelas);
arsort($kelas_terbanyak);
$kelas_terbanyak = key($kelas_terbanyak);
echo "Data uji: [" . implode(", ", $data_uji) . "]\n";
echo "Kelas: " . $kelas_terbanyak . "\n";