บทความนี้อธิบายอัลกอริทึม KNN ที่ใช้ใน Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
ทุกคนควรคุ้นเคยกับอัลกอริทึม KNN และพวกเขาเป็นหนึ่งในอัลกอริทึมคลาสสิกสิบอันดับแรกสำหรับการขุดข้อมูล
แนวคิดของอัลกอริทึมคือการจัดกลุ่มและจำแนกข้อมูลที่ไม่รู้จักสำหรับการจัดกลุ่มที่จัดอยู่ในชุดข้อมูลการฝึกอบรม ในหมู่พวกเขาระยะทางจะถูกคำนวณตามจุดที่ไม่รู้จักและจุดในข้อมูลการฝึกอบรมจุดที่มีระยะทางที่สั้นที่สุดจะถูกคำนวณและหมวดหมู่ที่จัดอยู่ในจุดนั้น
มาดูวิศวกรรมอัลกอริทึม:
1. เตรียมข้อมูลและประมวลผลข้อมูลล่วงหน้า
2. เลือกโครงสร้างข้อมูลที่เหมาะสมเพื่อจัดเก็บข้อมูลการฝึกอบรมและทดสอบ tuples
3. ตั้งค่าพารามิเตอร์เช่น K
4. รักษาคิวลำดับความสำคัญของขนาด K จากขนาดใหญ่ถึงเล็กตามระยะทางเพื่อจัดเก็บ tuples การฝึกอบรมเพื่อนบ้านที่ใกล้ที่สุด สุ่มเลือก k tuples จาก tuple ฝึกอบรมเป็น tuple เพื่อนบ้านที่ใกล้ที่สุดคำนวณระยะห่างระหว่าง tuple ทดสอบและ tuples k เหล่านี้และเก็บฉลาก tuple tupple และระยะทางในคิวลำดับความสำคัญ
5. วนซ้ำผ่านชุดการฝึกอบรม tuple คำนวณระยะห่างระหว่าง tuple การฝึกอบรมปัจจุบันและ tuple ทดสอบและแบ่งระยะที่ผลลัพธ์ l เป็นระยะทางสูงสุด lmax ในคิวลำดับความสำคัญ
6. ทำการเปรียบเทียบ ถ้า l> = lmax tuple จะถูกทิ้งและ tuple ถัดไปจะถูกสำรวจ ถ้า l <lmax ให้ลบ tuple ด้วยระยะทางที่ใหญ่ที่สุดในคิวลำดับความสำคัญและจัดเก็บ tuple ฝึกอบรมปัจจุบันในคิวลำดับความสำคัญ
7. หลังจากการเดินทางเสร็จสมบูรณ์ให้คำนวณส่วนใหญ่ของ k tuples ในคิวลำดับความสำคัญและใช้เป็นหมวดหมู่ของ tuple ทดสอบ
8. หลังจากการทดสอบชุดการทดสอบ tuple ได้รับการทดสอบคำนวณอัตราความผิดพลาดดำเนินการต่อเพื่อตั้งค่า K และใหม่ที่แตกต่างกันและในที่สุดก็รับค่า K ด้วยอัตราข้อผิดพลาดที่เล็กที่สุด
ตามกระบวนการอัลกอริทึมเราใช้ภาษา Java:
แพ็คเกจ knn;/** * พิกัดของคะแนน x และ y * @author ผู้ดูแลระบบ * */คลาสสาธารณะ pointbean {int x; int y; int public int getx () {return x;} โมฆะสาธารณะ setx (int x) {this.x = x; super (); this.x = x; this.y = y;} Public PointBean () {super ();}@overridepublic String toString () {return "pointBean [x =" + x + ", y =" + y + "]";}}}อัลกอริทึม KNN
แพ็คเกจ knn; นำเข้า java.util.arraylist;/** * วิธีการใช้งาน knn * @author administrator * */คลาสสาธารณะ knnmain {public double getPointLength (arraylist <PointBean> รายการ, PointBean bb) {int b_x = bb.getx (); int b_y = bb.gety (); double 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 ()); // ค้นหาระยะทางขั้นต่ำสำหรับ (int i = 1; i <list.size (); i ++) {ถ้า (อุณหภูมิ <((b_x -list.get.get (i) .getx ())*(b_x -list.get.get.getx ())+(b_y) temp = (b_x -list.get (i) .getx ())*(b_x -list.get (i) .gety ()); }} return math.sqrt (temp); } / ** * รับความยาวและค้นหาอันที่เล็กที่สุดสำหรับการจำแนกประเภท * @param list1 * @param list2 * @param list3 * @param bb * / โมฆะสาธารณะ getContent (arraylist <PointBean> list1, arrayList <PointBean> รายการ double b = getPointLength (list2, bb); double c = getPointLength (list3, bb); // ทำการเปรียบเทียบถ้า (a> b) {ถ้า (b> c) {system.out.println ("จุดนี้:"+bb.getx ()+","+bb.gety ()+""+"เป็นของ c"); } else {system.out.println ("จุดนี้:"+bb.getx ()+","+bb.gety ()+""+"เป็นของ b"); }} else {if (a> c) {system.out.println ("จุดนี้:"+bb.getx ()+","+bb.gety ()+""+"เป็นของ c"); } else {if (a> c) {system.out.println ("จุดนี้:"+bb.getx ()+","+bb.gety ()+""+"เป็นของ c"); } else {system.out.println ("จุดนี้:"+bb.getx ()+","+bb.gety ()+""+"เป็นของ"); -ฟังก์ชั่นหลัก
แพ็คเกจ knn; นำเข้า java.util.arraylist;/ * * ฟังก์ชั่นหลัก knn */คลาสสาธารณะ testjava {arraylist แบบคงที่ <PointBean> lista; arraylist คงที่ <PointBean> listB; arraylist คงที่ <PointBean> listc; arraylist คงที่ <PointBean> listd; โมฆะคงที่สาธารณะหลัก (String [] args) {// Chuangjia arraylist lista = arrayList ใหม่ <PointBean> (); listb = new ArrayList <PointBean> (); listc = new ArrayList <PointBean> (); listd = new ArrayList <PointBean> (); // เขียน data setDate (); getTestResult (); } /*** รับผลลัพธ์* /โมฆะคงที่ส่วนตัว getTestResult () {// สร้างวัตถุ knnmain km = knnmain ใหม่ (); สำหรับ (int i = 0; i <listd.size (); i ++) {km.getContent (lista, listb, listc, listd.get (i)); }} /*** เขียนข้อมูล* /โมฆะคงที่ส่วนตัว setDate () {// จุดพิกัดของจุด int a_x [] = {1,1,2,2,1}; int a_y [] = {0,1,1,0,2}; // BOINT CONTERCOUTION ของ B_X [] = {2,3,3,3,4}; int b_y [] = {4,4,3,2,3}; // COINTERING ของ C C_X [] = {4,5,5,6,6,6}; int c_y [] = {1,2,0,2,1}; // test data // b point ของจุดพิกัด int d_x [] = {3,3,3,0,5}; int d_y [] = {0,1,5,0,1}; // PointBean BA; สำหรับ (int i = 0; i <5; i ++) {ba = new PointBean (a_x [i], a_y [i]); Lista.add (BA); } // PointBean BB; สำหรับ (int i = 0; i <5; i ++) {bb = new PointBean (b_x [i], b_y [i]); listb.add (BB); } // PointBean BC; สำหรับ (int i = 0; i <5; i ++) {bc = new PointBean (c_x [i], c_y [i]); listc.add (bc); } // PointBean BD; สำหรับ (int i = 0; i <5; i ++) {bd = new PointBean (d_x [i], d_y [i]); listd.add (bd); -ผลการทดสอบ:
จุดนี้: 3, 1 เป็นของก
จุดนี้: 3, 5 เป็นของ B
จุดนี้: 0, 0 เป็นของก
จุดนี้: 5, 1 เป็นของ C
เมื่อมาถึงจุดนี้อัลกอริทึม KNN ที่เรียบง่ายได้ดำเนินการแบ่งจุดที่ไม่รู้จักซึ่งจะช่วยให้ทุกคนเข้าใจอัลกอริทึม KNN อัลกอริทึมบางอย่างที่ปรับปรุง KNN จะถูกโพสต์ในภายหลัง เรียนรู้และสร้างความก้าวหน้าด้วยกัน!
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน