Artikel ini menjelaskan algoritma KNN yang diimplementasikan di Java. Bagikan untuk referensi Anda, sebagai berikut:
Setiap orang harus terbiasa dengan algoritma KNN, dan mereka adalah salah satu dari sepuluh algoritma klasik teratas untuk penambangan data.
Gagasan algoritma ini adalah untuk mengelompokkan dan mengklasifikasikan data yang tidak diketahui untuk pengelompokan yang telah diklasifikasikan dalam dataset pelatihan. Di antara mereka, jarak dihitung berdasarkan titik yang tidak diketahui dan titik dalam data pelatihannya, titik dengan jarak terpendek dihitung, dan kategori di mana ia diklasifikasikan ke dalam titik itu.
Mari kita lihat teknik algoritma:
1. Mempersiapkan data dan preprocess data
2. Pilih struktur data yang sesuai untuk menyimpan data pelatihan dan menguji tupel
3. Tetapkan parameter, seperti k
4. Pertahankan antrian prioritas ukuran K, dari besar ke kecil, berdasarkan jarak, untuk menyimpan tupel pelatihan tetangga terdekat. Pilih kuple K secara acak dari tuple pelatihan sebagai tuple tetangga terdekat, hitung jarak antara tuple tes dan knel ini, dan simpan label tuple pelatihan dan jarak ke dalam antrian prioritas.
5. Iterasi melalui set tuple pelatihan, hitung jarak antara tuple pelatihan saat ini dan tuple tes, dan membagi jarak yang dihasilkan L ke jarak maksimum LMAX dalam antrian prioritas.
6. Buat perbandingan. Jika l> = lmax, tuple dibuang dan tuple berikutnya dilalui. Jika l <lmax, hapus tuple dengan jarak terbesar dalam antrian prioritas dan simpan tuple pelatihan saat ini dalam antrian prioritas.
7. Setelah traversal selesai, hitung sebagian besar k tupel dalam antrian prioritas dan gunakan sebagai kategori tuple tes.
8. Setelah set tuple tes diuji, hitung tingkat kesalahan, terus atur nilai k dan pelatihan ulang yang berbeda, dan akhirnya dapatkan nilai k dengan tingkat kesalahan terkecil.
Menurut proses algoritma, kami menerapkan bahasa Java:
Paket knn;/** * Koordinat poin x dan y * @author administrator * */pointbean kelas publik {int x; int y; public int getx () {return x;} public void setx (int x) {this.x = x;} public int gety () {return y;} public void sety (int y) {{{{{{public = {{public y; {public. super (); this.x = x; this.y = y;} public pointbean () {super ();}@overridepublic string toString () {return "pointbean [x =" + x + ", y =" + y + "]";}}Algoritma KNN
paket knn; import java.util.arraylist;/** * metode implementasi knn * @author administrator * */kelas publik knnmain {public double getpointlength (arraylist <pointbean> daftar, pointbean bb) {int b_x = bb.getx (); int b_y = bb.gety (); ganda temp = (b_x -list.get (0) .getx ())*(b_x -list.get (0) .getx ())+ (b_y -list.get (0) .gety ())*(b_y -list.get (0) .gety ()); // Temukan jarak minimum untuk (int i = 1; i <list.size (); i ++) {if (temp <((b_x -list.get (i) .getx ())*(b_x -list.get (i) .getx ())+(b_y -list.get (i) .gety ())*. temp = (b_x -list.get (i) .getX ())*(b_x -list.get (i) .gety ()); }} return math.sqrt (temp); } /** * Get the length and find the smallest one for classification* @param list1 * @param list2 * @param list3 * @param bb */ public void getContent(ArrayList<PointBean> list1,ArrayList<PointBean> list2, ArrayList<PointBean> list3,PointBean bb){ double A=getPointLength(list1,bb); double b = getPointLength (list2, bb); double c = getPointLength (list3, bb); // Buat perbandingan if (a> b) {if (b> c) {System.out.println ("poin ini:"+bb.getx ()+","+bb.gety ()+""+"milik C"); } else {System.out.println ("Poin ini:"+bb.getx ()+","+bb.gety ()+""+"milik B"); }} else {if (a> c) {System.out.println ("Poin ini:"+bb.getx ()+","+bb.gety ()+""+"milik c"); } else {if (a> c) {system.out.println ("Poin ini:"+bb.getx ()+","+bb.gety ()+""+"milik c"); } else {System.out.println ("Poin ini:"+bb.getx ()+","+bb.gety ()+""+"milik A"); }}}}Fungsi utama
paket knn; import java.util.arraylist;/ * * fungsi utama knn */kelas publik testjava {static arraylist <pointbean> lista; Statis ArrayList <CointBean> listB; Statis ArrayList <CointBean> listc; Statis ArrayList <Cointbean> listd; public static void main (string [] args) {// chuangjia arraylist lista = arraylist baru <cointbean> (); ListB = ArrayList baru <CointBean> (); listc = ArrayList baru <CointBean> (); listd = ArrayList baru <CointBean> (); // tulis data setDate (); gettestresult (); } /*** Dapatkan hasilnya* /private static void getTestresult () {// Buat objek knnmain km = knnmain baru (); untuk (int i = 0; i <listd.size (); i ++) {km.getContent (lista, listb, listc, listd.get (i)); }} /*** Tulis data* /private static void setDate () {// titik koordinat A int a_x [] = {1,1,2,2,1}; int a_y [] = {0,1,1,0,2}; // titik koordinat b b_x [] = {2,3,3,3,4}; int b_y [] = {4,4,3,2,3}; // titik koordinat C int c_x [] = {4,5,5,6,6}; int c_y [] = {1,2,0,2,1}; // uji data // titik koordinat b int d_x [] = {3,3,3,0,5}; int d_y [] = {0,1,5,0,1}; // Pointbean BA; untuk (int i = 0; i <5; i ++) {ba = pointbean baru (a_x [i], a_y [i]); lista.add (BA); } // Pointbean BB; untuk (int i = 0; i <5; i ++) {bb = pointbean baru (b_x [i], b_y [i]); listb.add (bb); } // Pointbean BC; untuk (int i = 0; i <5; i ++) {bc = new pointbean (c_x [i], c_y [i]); listc.add (bc); } // Pointbean BD; untuk (int i = 0; i <5; i ++) {bd = new pointbean (d_x [i], d_y [i]); listd.add (bd); }}}Hasil tes:
Poin ini: 3, 1 milik a
Poin ini: 3, 5 milik B
Poin ini: 0, 0 milik a
Poin ini: 5, 1 milik C
Pada titik ini, algoritma KNN sederhana telah mengimplementasikan divisi poin yang tidak diketahui, yang akan membantu semua orang memahami algoritma KNN. Beberapa algoritma yang meningkatkan KNN akan diposting nanti. Belajar dan buat kemajuan bersama!
Untuk informasi lebih lanjut tentang algoritma java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" tips java "tips java" Tips "Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.