\(~~~~~~~~~~\)k-Nearest Neighbors (k-NN)\(~~~~~~~~~~\)
อัลกอริธึม k-เพื่อนบ้านที่ใกล้ที่สุด

อ.ดร. สมศักดิ์ จันทร์เอม

วิทยาลัยนานาชาตินวัตกรรมดิจิทัล มหาวิทยาลัยเชียงใหม่

14 พฤศจิกายน 2568

k-Nearest Neighbors (k-NN) คืออะไร?

อัลกอริธึม k-Nearest Neighbors (k-NN) ถูกพัฒนาโดย Fix และ Hodges ในปี 1951 ในงานวิจัยของพวกเขาเกี่ยวกับการจำแนกประเภทรูปแบบ (Pattern Classification) ที่มหาวิทยาลัย California, Berkeley

อย่างไรก็ตาม อัลกอริธึมนี้ได้รับความนิยมอย่างกว้างขวางหลังจาก Thomas Cover และ Peter Hart ได้เผยแพร่งานวิจัยในปี 1967 ซึ่งแสดงให้เห็นว่า k-NN เป็นวิธีที่มีประสิทธิภาพสำหรับการจำแนกประเภท

  • การจำแนกประเภท (Classification)

  • การถดถอย (Regression)

โดยอาศัยหลักการของ “จุดที่ใกล้กันมักมีคุณสมบัติคล้ายกัน”

หลักการทำงานของ k-NN

  1. กำหนดจำนวน k (จำนวนเพื่อนบ้านที่ใกล้ที่สุด)

  2. วัดระยะห่างระหว่างจุดข้อมูลใหม่กับจุดข้อมูลในชุดฝึก (Training Data)

  3. เลือก k จุดข้อมูลที่ใกล้ที่สุด

  4. สำหรับ Classification: ดูว่าหมวดหมู่ใดมีมากที่สุดใน k จุด → กำหนดให้เป็นของกลุ่มนั้น

  5. สำหรับ Regression: คำนวณค่าเฉลี่ยของ k จุดที่ใกล้ที่สุด → ใช้เป็นค่าพยากรณ์

การวัดระยะห่างที่ใช้ใน k-NN

Euclidean Distance

\[ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \]

(นิยมใช้มากที่สุด)

Manhattan Distance

\[ d = |x_2 - x_1| + |y_2 - y_1| \]

จุดเด่นของ k-NN และ จุดด้อยของ k-NN

จุดเด่น

\(~~~\)✅ เข้าใจง่าย และใช้งานง่าย

\(~~~\)✅ ใช้ได้ทั้ง Classification และ Regression

\(~~~\)✅ ไม่ต้องมีการ Train Model (Lazy Learning)

จุดด้อย

\(~~~\)ทำงานช้าเมื่อข้อมูลมีขนาดใหญ่ (ต้องคำนวณระยะทางกับทุกจุด)

\(~~~\)อ่อนไหวต่อค่าผิดปกติ (Outliers)

\(~~~\)ต้องการการปรับค่าพารามิเตอร์ k ให้เหมาะสม

ตัวอย่างการคำนวณ k-NN (Step-by-Step)

สมมติว่าเรามีข้อมูล 8 จุด โดยแต่ละจุดมีค่าพิกัด (X, Y) และกลุ่มที่กำหนดไว้ล่วงหน้า (A หรือ B)

จุด X Y กลุ่ม
1 2 4 A
2 4 6 A
3 4 2 A
4 6 5 A
5 7 3 B
6 8 6 B
7 9 2 B
8 10 5 B

และเรามี จุดทดสอบ (X = 6, Y = 3) ที่เราต้องการจำแนกว่าอยู่ในกลุ่ม A หรือ B โดยใช้ k-NN

ขั้นตอนการคำนวณ k-NN

1. คำนวณระยะทางระหว่างจุดทดสอบกับทุกจุดใน dataset

ใช้ ระยะทางแบบยุคลิด (Euclidean Distance) \[ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \]

จุด X Y กลุ่ม ระยะทางจาก (6,3)
1 2 4 A \(\sqrt{(6-2)^2 + (3-4)^2} = \sqrt{16 + 1} = \sqrt{17} \approx 4.12\)
2 4 6 A \(\sqrt{(6-4)^2 + (3-6)^2} = \sqrt{4 + 9} = \sqrt{13} \approx 3.61\)
3 4 2 A \(\sqrt{(6-4)^2 + (3-2)^2} = \sqrt{4 + 1} = \sqrt{5} \approx 2.24\)
4 6 5 A \(\sqrt{(6-6)^2 + (3-5)^2} = \sqrt{0 + 4} = \sqrt{4} = 2.00\)
5 7 3 B \(\sqrt{(6-7)^2 + (3-3)^2} = \sqrt{1 + 0} = \sqrt{1} = 1.00\)
6 8 6 B \(\sqrt{(6-8)^2 + (3-6)^2} = \sqrt{4 + 9} = \sqrt{13} \approx 3.61\)
7 9 2 B \(\sqrt{(6-9)^2 + (3-2)^2} = \sqrt{9 + 1} = \sqrt{10} \approx 3.16\)
8 10 5 B \(\sqrt{(6-10)^2 + (3-5)^2} = \sqrt{16 + 4} = \sqrt{20} \approx 4.47\)

2. เลือกค่า k และหาจุดที่ใกล้ที่สุด

สมมติว่าเลือก k = 3 (ดู 3 จุดที่ใกล้ที่สุด)

จุดที่ใกล้ที่สุด ระยะทาง กลุ่ม
5 (7,3) 1.00 B
4 (6,5) 2.00 A
3 (4,2) 2.24 A

3. นับคะแนนเสียงจาก k จุดที่ใกล้ที่สุด

  • A = 2 (จากจุด 4 และ 3)

  • B = 1 (จากจุด 5)

กลุ่มที่มีจำนวนมากที่สุดคือ A

4. ตัดสินผลลัพธ์

เนื่องจากส่วนใหญ่เป็น A เราจึงจำแนกจุด (6,3) ว่าเป็น กลุ่ม A

📌 สรุป

k-NN การทำงาน
✅ ใช้ได้ทั้ง Classification & Regression ใช้ k เพื่อนบ้านที่ใกล้ที่สุดในการทำนาย
✅ ไม่ต้อง Train Model (Lazy Learning) ทำงานแบบ Instance-Based
✅ เหมาะกับข้อมูลขนาดเล็ก-กลาง อาจช้าเมื่อข้อมูลมีขนาดใหญ่
✅ การเลือกค่า k สำคัญมาก (ต้องเป็นเลขคี่) k เล็กไป = Overfitting,\(~~~~~~~~\) k ใหญ่ไป = Underfitting

ตัวอย่างการอธิบาย k-NN ด้วย

1. สร้างข้อมูลตัวอย่าง

เราจะสร้างชุดข้อมูลจำลองที่มี 2 กลุ่ม (Class A และ Class B) แล้วแสดงการแบ่งพื้นที่โดยใช้ k-NN

กราฟจะแสดงจุด สีน้ำเงินและสีแดงที่แยกกันออกเป็นสองกลุ่ม

2. ใช้ k-NN ทำนายข้อมูลใหม่

เราจะสร้างจุดข้อมูลใหม่ (สีดำ) แล้วใช้ k-NN ทำนายว่าจุดนี้ควรถูกจัดอยู่ในกลุ่มใด

ผลลัพธ์: กราฟจะแสดงจุดใหม่ (สีดำ) อยู่บนพื้นที่ของกลุ่มที่มีเพื่อนบ้านมากที่สุด

3. สร้าง Decision Boundary ของ k-NN

เพื่อให้เห็นว่า k-NN จำแนกข้อมูลอย่างไร เราจะสร้าง decision boundary (เส้นแบ่งระหว่างกลุ่ม)

📌 ผลลัพธ์:

  • พื้นที่ของแต่ละคลาสถูกระบายสีเบาๆ ตาม k-NN

  • จุดข้อมูลแต่ละกลุ่มยังคงมีสีชัดเจน

  • แสดงให้เห็นว่าค่า k ที่ต่างกันจะส่งผลต่อการแบ่งพื้นที่

ตัวอย่างการใช้งาน k-NN ในทางธุรกิจ เศรษฐศาสตร์ และด้านอื่นๆ

1. การตลาดและการแนะนำสินค้า (Marketing & Recommendation Systems)

การแนะนำสินค้าให้ลูกค้า (Product Recommendation)

  • ใช้ k-NN เพื่อแนะนำสินค้าให้ลูกค้าโดยดูจากลูกค้าที่มีพฤติกรรมการซื้อคล้ายกัน

  • ตัวอย่าง: Amazon, Shopee, Lazada ใช้ k-NN เพื่อแนะนำสินค้าที่ลูกค้าสนใจ

การแบ่งกลุ่มลูกค้า (Customer Segmentation)

  • ใช้ k-NN เพื่อจัดกลุ่มลูกค้าตามลักษณะพฤติกรรมการซื้อหรือข้อมูลประชากร

  • ตัวอย่าง: ธนาคารสามารถใช้ k-NN ในการแบ่งกลุ่มลูกค้าเพื่อนำเสนอสินเชื่อหรือบัตรเครดิต

2. การวิเคราะห์สินเชื่อและความเสี่ยง (Credit Risk Analysis)

การพิจารณาให้สินเชื่อ (Loan Approval)

  • ใช้ k-NN วิเคราะห์ว่าลูกค้าควรได้รับอนุมัติสินเชื่อหรือไม่ โดยพิจารณาข้อมูลลูกค้าเก่าที่มีคุณสมบัติคล้ายกัน

  • ตัวอย่าง: ธนาคารใช้ k-NN เพื่อประเมินความเสี่ยงก่อนอนุมัติสินเชื่อ

การตรวจจับการฉ้อโกงทางการเงิน (Fraud Detection)

  • ใช้ k-NN ตรวจสอบว่าธุรกรรมที่เกิดขึ้นผิดปกติหรือไม่ โดยเปรียบเทียบกับธุรกรรมที่ผ่านมา

  • ตัวอย่าง: บัตรเครดิต VISA หรือ MasterCard ใช้ k-NN เพื่อตรวจสอบธุรกรรมที่อาจเป็นการโกง

3. การวิเคราะห์ตลาดหุ้นและเศรษฐศาสตร์ (Stock Market & Economics)

การทำนายราคาหุ้น (Stock Price Prediction)

  • ใช้ k-NN ทำนายแนวโน้มของราคาหุ้นโดยเปรียบเทียบกับรูปแบบราคาหุ้นในอดีต

  • ตัวอย่าง: นักลงทุนใช้ k-NN วิเคราะห์แนวโน้มของหุ้นเพื่อตัดสินใจลงทุน

การวิเคราะห์แนวโน้มเศรษฐกิจ (Economic Trend Analysis)

  • ใช้ k-NN วิเคราะห์ตัวชี้วัดทางเศรษฐกิจ เช่น GDP, อัตราเงินเฟ้อ, การจ้างงาน เพื่อตรวจจับแนวโน้มในอนาคต

  • ตัวอย่าง: นักเศรษฐศาสตร์ใช้ k-NN เพื่อวิเคราะห์ว่าเศรษฐกิจจะเข้าสู่ภาวะถดถอยหรือไม่

4. การแพทย์และสุขภาพ (Healthcare & Medical Diagnosis)

การวินิจฉัยโรค (Disease Diagnosis)

  • ใช้ k-NN เพื่อวิเคราะห์ข้อมูลผู้ป่วยและวินิจฉัยว่าเป็นโรคอะไร โดยเปรียบเทียบกับผู้ป่วยที่มีอาการคล้ายกัน

  • ตัวอย่าง: ใช้ k-NN ทำนายว่าผู้ป่วยมีโอกาสเป็นโรคเบาหวานหรือโรคหัวใจหรือไม่

การจำแนกประเภทของเซลล์มะเร็ง (Cancer Detection)

  • ใช้ k-NN แยกแยะว่าเซลล์เนื้องอกเป็นมะเร็งหรือไม่ โดยเปรียบเทียบกับข้อมูลเซลล์ที่มีอยู่

  • ตัวอย่าง: ใช้ k-NN วิเคราะห์ผลตรวจชิ้นเนื้อจากผู้ป่วย

5. การจำแนกประเภทของภาพและเสียง (Image & Speech Recognition)

การรู้จำลายมือและตัวอักษร (Handwriting Recognition)

  • ใช้ k-NN จำแนกตัวอักษรในลายมือหรือเอกสารที่สแกนมา

  • ตัวอย่าง: ระบบ OCR (Optical Character Recognition) ใช้ k-NN ในการแปลงภาพเป็นข้อความ

การจดจำเสียงและการรู้จำคำพูด (Speech Recognition)

  • ใช้ k-NN วิเคราะห์เสียงพูดและจำแนกออกเป็นคำศัพท์ต่างๆ

  • ตัวอย่าง: ระบบผู้ช่วยอัจฉริยะ เช่น Siri และ Google Assistant ใช้ k-NN ในการจดจำเสียงของผู้ใช้

References