การนำ K-Means Clustering มาใช้ใน Python
K-means clustering เป็นอัลกอริทึมที่ได้รับความนิยมในสาย Machine Learning แบบ Unsupervised Learning ซึ่งใช้สำหรับแบ่งกลุ่มข้อมูล (Clustering) ออกเป็นจำนวนคลัสเตอร์ที่กำหนดไว้ล่วงหน้า โดยมีเป้าหมายคือ จัดกลุ่มข้อมูลที่มีลักษณะคล้ายกันให้อยู่ในกลุ่มเดียวกัน และค้นหารูปแบบหรือโครงสร้างที่ซ่อนอยู่ภายในข้อมูล ข้อมูลภายในคลัสเตอร์ควรจะมีความคล้ายคลึงกัน ดังนั้นเป้าหมายของเราคือ ลดระยะห่าง (Distance) ระหว่างจุดข้อมูลภายในคลัสเตอร์นั้นมีอัลกอริทึมหนึ่งที่พยายามจะลดระยะห่างระหว่างจุดข้อมูลกับจุดศูนย์กลาง (Centroid) ของคลัสเตอร์ ซึ่งก็คือเทคนิค K-means clustering การจัดกลุ่มแบบ K-means เป็นวิธีการที่นิยมใช้ในการจัดกลุ่มข้อมูลโดยกำหนดข้อสังเกตให้กับกลุ่มข้อมูลตามความใกล้ชิดกับศูนย์กลางของกลุ่มข้อมูล ซึ่งเป็นเทคนิคการเรียนรู้แบบไม่มีผู้ดูแลที่จัดกลุ่มจุดข้อมูลเป็นกลุ่มข้อมูลตามความคล้ายคลึงกัน บทความนี้จะนำชุดข้อมูลการทำนายการขอสินเชื่อ (Loan Prediction Dataset) ขั้นตอนที่ 1 การนำเข้าไลบรารีและนำเข้าข้อมูล นำเข้าไลบรารี่ทั้งหมด นำเข้าข้อมูล Data และ อ่านไฟล์ CSV และดูข้อมูลห้าแถวแรก ข้อมูลสามารถcopy codeและโหลดได้ตามนี้เลย [https://drive.google.com/file/d/1ZzEouo7lRJvajxK6jLM2K_p9xAwGw1tS/view] Output จากโค้ดดังกล่าวจะแสดงข้อมูลตารางData ขั้นตอนที่ 2 เขียนโค้ด Python โหลดข้อมูลจากลิงก์(ไฟล์ .csv ที่เก็บไว้บน GitHub)ดึงเฉพาะ2 คอลัมน์ที่สนใจมาเก็บไว้ในตัวแปร X และสร้างกราฟ scatter plot (แกนX“จำนวนเงินกู้” แกนY“รายได้ของผู้สมัคร”) Output จากโค้ดดังกล่าวจะแสดงกราฟscatter plotการกระจายตัวของข้อมูลความสัมพันธ์ระหว่างจำนวนเงินกู้กับรายได้ของผู้สมัครโดยที่จุดข้อมูลเป็นสีดำ ขั้นตอนที่ 3 เข้าสู่กระบวนการ K-Means Clustering ส่วนที่ 1 และ 2 ของ K-Means คือการเลือกจำนวนคลัสเตอร์ (k) และเลือกจุดศูนย์กลางสุ่มสำหรับแต่ละคลัสเตอร์ เราจะเลือกคลัสเตอร์ 3 คลัสเตอร์ จากนั้นเลือกการสังเกตแบบสุ่มจากข้อมูลเป็นจุดศูนย์กลาง กำหนดจำนวนกลุ่มล่วงหน้า ซึ่งในกรณีนี้เรากำหนดให้ K = 3 สุ่มเลือกข้อมูลจำนวน 3 แถว (เพราะ K=3) จาก X เพื่อใช้เป็น "จุดศูนย์กลาง" ของแต่ละกลุ่มในตอนเริ่มต้นจุดศูนย์กลางเหล่านี้จะเป็นเหมือนตัวแทนของแต่ละกลุ่ม Output จากโค้ดดังกล่าวจะแสดงกราฟscatter plot การกระจายตัวของข้อมูลความสัมพันธ์ระหว่างจำนวนเงินกู้กับรายได้ของผู้สมัคร โดยที่จุดข้อมูลเป็นสีดำและจุดสีแดงในที่นี้แสดงถึงจุดศูนย์กลาง 3 จุดสำหรับแต่ละคลัสเตอร์เราได้เลือกจุดเหล่านี้แบบสุ่ม(ทุกครั้งที่คุณรันโค้ดนี้ คุณอาจได้รับจุดศูนย์กลางที่แตกต่างกัน) ขั้นตอนที่ 4 กำหนดเงื่อนไขบางประการเพื่อนำอัลกอริทึม K-Means Clustering ทำการวนลูปเพื่อหากลุ่มที่เหมาะสมที่สุดให้กับข้อมูลทั้งหมด การวนลูปนี้จะทำงานซ้ำไปเรื่อย ๆ จนกว่าตำแหน่งของ centroid จะไม่เปลี่ยน 2.คำนวณระยะห่างระหว่างแต่ละจุดกับ centroid แต่ละกลุ่มแต่ละจุดข้อมูล(row_d)กับcentroid (row_c)โดยใช้Euclidean Distance 3.จัดกลุ่มให้แต่ละจุดข้อมูลควรอยู่กลุ่มไหน โดยเลือกกลุ่มที่มีระยะทางใกล้ที่สุด 4.สร้างคอลัมน์ Cluster ในตารางแต่ละจุดใน DataFrame X จะมีคอลัมน์ชื่อ Cluster 5.คำนวณค่าเฉลี่ยของข้อมูลในแต่ละกลุ่ม 6.ตรวจสอบว่า centroid เปลี่ยนหรือไม่ถ้าcentroidเปลี่ยนแปลงทำซ้ำรอบถัดไปถ้าcentroid ไม่เปลี่ยนแล้วหยุดการวนลูปเพราะการจัดกลุ่มนิ่งแล้วและปรับ centroid ให้เป็นค่าล่าสุด Output จากโค้ดดังกล่าวจะแสดงความแตกต่างระหว่างจุดศูนย์กลางในการทำซ้ำครั้งก่อนและการทำซ้ำปัจจุบันเมื่อความแตกต่างนี้เป็น 0 เราจะหยุดการฝึกอบรม ขั้นตอนที่ 5 แสดงผลการจัดกลุ่มลูกค้าตามรายได้ กำหนดสีสำหรับแต่ละคลัสเตอร์และจุดศูนย์กลางของแต่ละกลุ่ม (Centroids) จะถูกแสดงด้วยเครื่องหมาย X สีแดงขนาดใหญ่ Output จากโค้ดดังกล่าวจะแสดงกราฟภาพคลัสเตอร์ทั้งสาม ตัวอย่างเพิ่มเติม K-means เป็นอัลกอริทึมที่อิงกับ "จุดศูนย์กลาง" หรือ "ระยะทาง" กล่าวคือ เราจะคำนวณระยะห่างของจุดข้อมูลแต่ละจุดกับศูนย์กลางของแต่ละคลัสเตอร์ แล้วจัดข้อมูลนั้นเข้าสู่คลัสเตอร์ที่มีศูนย์กลางใกล้ที่สุด โดยใน K-means แต่ละคลัสเตอร์จะมีจุดศูนย์กลาง (centroid) ของตัวเอง เราใช้ข้อมูลกลุ่มรายได้ของแฟนคลับกับจำนวนครั้งที่ได้ซื้อตั๋วโดยการนำ K-Means Clustering มาใช้ใน Python ขั้นตอนที่ 1 การนำเข้าข้อมูล โหลดข้อมูลจากลิงก์(ไฟล์ .csv ที่เก็บไว้บน GitHub)นำเข้าข้อมูล Data และ อ่านไฟล์ CSV และดูข้อมูลห้าแถวแรก สามารถ copy code และโหลดได้ตามนี้เลย [https://raw.githubusercontent.com/Buntida045/-/refs/heads/main/ticket.csv] Output จากโค้ดดังกล่าวจะแสดงข้อมูลตารางData ขั้นตอนที่ 2 scatter plot/Elbow Method 1.โหลดข้อมูลจากลิงก์(ไฟล์ .csv ที่เก็บไว้บน GitHub)ดึงเฉพาะ2 คอลัมน์ที่สนใจมาเก็บไว้ในตัวแปร X และสร้างกราฟ scatter plot (แกนX“รายได้ของแฟนคลับ” แกนY“จำนวนครั้งที่ได้ซื้อตั๋ว”) Output จากโค้ดดังกล่าวจะแสดงกราฟscatter plotการกระจายตัวของข้อมูลความสัมพันธ์ระหว่างรายได้ของแฟนคลับกับจำนวนครั้งที่ได้ซื้อตั๋วโดยที่จุดข้อมูลเป็นสีดำ 2.จำนวนคลัสเตอร์ที่เหมาะสม (optimal k) สำหรับการทำ K-Means Clustering โดยดูจากค่า SSE (Sum of Squared Errors) Output จากโค้ดดังกล่าวแสดงจำนวนคลัสเตอร์เพิ่มขึ้น ค่า SSE จะลดลง จุดที่ 4 ขั้นตอนที่ 3 จุดข้อมูลทั้งหมด/ตำแหน่งจุดศูนย์กลาง กำหนดจำนวนคลัสเตอร์ที่ต้องการ = 3 สุ่มเลือกข้อมูลจาก X จำนวน 3 แถว (ตามค่า K)จุดข้อมูลที่ถูกเลือกนี้จะใช้เป็น centroid เริ่มต้น(sample() จะสุ่มข้อมูลโดยไม่ต้องเรียนรู้จากโมเดล) วาดจุด centroid ที่สุ่มขึ้น ใช้จุดสีแดงเพื่อแสดงตำแหน่งศูนย์กลางเพื่อแสดงตำแหน่งศูนย์กลาง Output จากโค้ดดังกล่าวแสดงกราฟscatter plot การกระจายตัวของข้อมูลความสัมพันธ์ระหว่างรายได้ของแฟนคลับกับจำนวนครั้งที่ได้ซื้อตั๋วโดยที่จุดข้อมูลเป็นสีดำและจุดสีแดงในที่น
K-means clustering เป็นอัลกอริทึมที่ได้รับความนิยมในสาย Machine Learning แบบ Unsupervised Learning ซึ่งใช้สำหรับแบ่งกลุ่มข้อมูล (Clustering) ออกเป็นจำนวนคลัสเตอร์ที่กำหนดไว้ล่วงหน้า โดยมีเป้าหมายคือ จัดกลุ่มข้อมูลที่มีลักษณะคล้ายกันให้อยู่ในกลุ่มเดียวกัน และค้นหารูปแบบหรือโครงสร้างที่ซ่อนอยู่ภายในข้อมูล ข้อมูลภายในคลัสเตอร์ควรจะมีความคล้ายคลึงกัน ดังนั้นเป้าหมายของเราคือ ลดระยะห่าง (Distance) ระหว่างจุดข้อมูลภายในคลัสเตอร์นั้นมีอัลกอริทึมหนึ่งที่พยายามจะลดระยะห่างระหว่างจุดข้อมูลกับจุดศูนย์กลาง (Centroid) ของคลัสเตอร์ ซึ่งก็คือเทคนิค K-means clustering
การจัดกลุ่มแบบ K-means เป็นวิธีการที่นิยมใช้ในการจัดกลุ่มข้อมูลโดยกำหนดข้อสังเกตให้กับกลุ่มข้อมูลตามความใกล้ชิดกับศูนย์กลางของกลุ่มข้อมูล ซึ่งเป็นเทคนิคการเรียนรู้แบบไม่มีผู้ดูแลที่จัดกลุ่มจุดข้อมูลเป็นกลุ่มข้อมูลตามความคล้ายคลึงกัน
บทความนี้จะนำชุดข้อมูลการทำนายการขอสินเชื่อ (Loan Prediction Dataset)
ขั้นตอนที่ 1 การนำเข้าไลบรารีและนำเข้าข้อมูล
นำเข้าไลบรารี่ทั้งหมด
นำเข้าข้อมูล Data และ อ่านไฟล์ CSV และดูข้อมูลห้าแถวแรก ข้อมูลสามารถcopy codeและโหลดได้ตามนี้เลย
[https://drive.google.com/file/d/1ZzEouo7lRJvajxK6jLM2K_p9xAwGw1tS/view]
Output จากโค้ดดังกล่าวจะแสดงข้อมูลตารางData
ขั้นตอนที่ 2 เขียนโค้ด Python
โหลดข้อมูลจากลิงก์(ไฟล์ .csv ที่เก็บไว้บน GitHub)ดึงเฉพาะ2 คอลัมน์ที่สนใจมาเก็บไว้ในตัวแปร X และสร้างกราฟ scatter plot (แกนX“จำนวนเงินกู้” แกนY“รายได้ของผู้สมัคร”)
Output จากโค้ดดังกล่าวจะแสดงกราฟscatter plotการกระจายตัวของข้อมูลความสัมพันธ์ระหว่างจำนวนเงินกู้กับรายได้ของผู้สมัครโดยที่จุดข้อมูลเป็นสีดำ
ขั้นตอนที่ 3 เข้าสู่กระบวนการ K-Means Clustering
ส่วนที่ 1 และ 2 ของ K-Means คือการเลือกจำนวนคลัสเตอร์ (k) และเลือกจุดศูนย์กลางสุ่มสำหรับแต่ละคลัสเตอร์ เราจะเลือกคลัสเตอร์ 3 คลัสเตอร์ จากนั้นเลือกการสังเกตแบบสุ่มจากข้อมูลเป็นจุดศูนย์กลาง
- กำหนดจำนวนกลุ่มล่วงหน้า ซึ่งในกรณีนี้เรากำหนดให้ K = 3
- สุ่มเลือกข้อมูลจำนวน 3 แถว (เพราะ K=3) จาก X เพื่อใช้เป็น "จุดศูนย์กลาง" ของแต่ละกลุ่มในตอนเริ่มต้นจุดศูนย์กลางเหล่านี้จะเป็นเหมือนตัวแทนของแต่ละกลุ่ม
Output จากโค้ดดังกล่าวจะแสดงกราฟscatter plot การกระจายตัวของข้อมูลความสัมพันธ์ระหว่างจำนวนเงินกู้กับรายได้ของผู้สมัคร โดยที่จุดข้อมูลเป็นสีดำและจุดสีแดงในที่นี้แสดงถึงจุดศูนย์กลาง 3 จุดสำหรับแต่ละคลัสเตอร์เราได้เลือกจุดเหล่านี้แบบสุ่ม(ทุกครั้งที่คุณรันโค้ดนี้ คุณอาจได้รับจุดศูนย์กลางที่แตกต่างกัน)
ขั้นตอนที่ 4 กำหนดเงื่อนไขบางประการเพื่อนำอัลกอริทึม K-Means Clustering
- ทำการวนลูปเพื่อหากลุ่มที่เหมาะสมที่สุดให้กับข้อมูลทั้งหมด การวนลูปนี้จะทำงานซ้ำไปเรื่อย ๆ จนกว่าตำแหน่งของ centroid จะไม่เปลี่ยน
2.คำนวณระยะห่างระหว่างแต่ละจุดกับ centroid แต่ละกลุ่มแต่ละจุดข้อมูล(row_d)กับcentroid (row_c)โดยใช้Euclidean Distance
3.จัดกลุ่มให้แต่ละจุดข้อมูลควรอยู่กลุ่มไหน โดยเลือกกลุ่มที่มีระยะทางใกล้ที่สุด
4.สร้างคอลัมน์ Cluster ในตารางแต่ละจุดใน DataFrame X จะมีคอลัมน์ชื่อ Cluster
5.คำนวณค่าเฉลี่ยของข้อมูลในแต่ละกลุ่ม
6.ตรวจสอบว่า centroid เปลี่ยนหรือไม่ถ้าcentroidเปลี่ยนแปลงทำซ้ำรอบถัดไปถ้าcentroid ไม่เปลี่ยนแล้วหยุดการวนลูปเพราะการจัดกลุ่มนิ่งแล้วและปรับ centroid ให้เป็นค่าล่าสุด
Output จากโค้ดดังกล่าวจะแสดงความแตกต่างระหว่างจุดศูนย์กลางในการทำซ้ำครั้งก่อนและการทำซ้ำปัจจุบันเมื่อความแตกต่างนี้เป็น 0 เราจะหยุดการฝึกอบรม
ขั้นตอนที่ 5 แสดงผลการจัดกลุ่มลูกค้าตามรายได้
กำหนดสีสำหรับแต่ละคลัสเตอร์และจุดศูนย์กลางของแต่ละกลุ่ม (Centroids) จะถูกแสดงด้วยเครื่องหมาย X สีแดงขนาดใหญ่
Output จากโค้ดดังกล่าวจะแสดงกราฟภาพคลัสเตอร์ทั้งสาม
ตัวอย่างเพิ่มเติม
K-means เป็นอัลกอริทึมที่อิงกับ "จุดศูนย์กลาง" หรือ "ระยะทาง" กล่าวคือ เราจะคำนวณระยะห่างของจุดข้อมูลแต่ละจุดกับศูนย์กลางของแต่ละคลัสเตอร์ แล้วจัดข้อมูลนั้นเข้าสู่คลัสเตอร์ที่มีศูนย์กลางใกล้ที่สุด โดยใน K-means แต่ละคลัสเตอร์จะมีจุดศูนย์กลาง (centroid) ของตัวเอง
เราใช้ข้อมูลกลุ่มรายได้ของแฟนคลับกับจำนวนครั้งที่ได้ซื้อตั๋วโดยการนำ K-Means Clustering มาใช้ใน Python
ขั้นตอนที่ 1 การนำเข้าข้อมูล
โหลดข้อมูลจากลิงก์(ไฟล์ .csv ที่เก็บไว้บน GitHub)นำเข้าข้อมูล Data และ อ่านไฟล์ CSV และดูข้อมูลห้าแถวแรก สามารถ copy code และโหลดได้ตามนี้เลย
[https://raw.githubusercontent.com/Buntida045/-/refs/heads/main/ticket.csv]
Output จากโค้ดดังกล่าวจะแสดงข้อมูลตารางData
ขั้นตอนที่ 2 scatter plot/Elbow Method
1.โหลดข้อมูลจากลิงก์(ไฟล์ .csv ที่เก็บไว้บน GitHub)ดึงเฉพาะ2 คอลัมน์ที่สนใจมาเก็บไว้ในตัวแปร X และสร้างกราฟ scatter plot (แกนX“รายได้ของแฟนคลับ” แกนY“จำนวนครั้งที่ได้ซื้อตั๋ว”)
Output จากโค้ดดังกล่าวจะแสดงกราฟscatter plotการกระจายตัวของข้อมูลความสัมพันธ์ระหว่างรายได้ของแฟนคลับกับจำนวนครั้งที่ได้ซื้อตั๋วโดยที่จุดข้อมูลเป็นสีดำ
2.จำนวนคลัสเตอร์ที่เหมาะสม (optimal k) สำหรับการทำ K-Means Clustering โดยดูจากค่า SSE (Sum of Squared Errors)
Output จากโค้ดดังกล่าวแสดงจำนวนคลัสเตอร์เพิ่มขึ้น ค่า SSE จะลดลง จุดที่ 4
ขั้นตอนที่ 3 จุดข้อมูลทั้งหมด/ตำแหน่งจุดศูนย์กลาง
- กำหนดจำนวนคลัสเตอร์ที่ต้องการ = 3
- สุ่มเลือกข้อมูลจาก X จำนวน 3 แถว (ตามค่า K)จุดข้อมูลที่ถูกเลือกนี้จะใช้เป็น centroid เริ่มต้น(sample() จะสุ่มข้อมูลโดยไม่ต้องเรียนรู้จากโมเดล)
- วาดจุด centroid ที่สุ่มขึ้น ใช้จุดสีแดงเพื่อแสดงตำแหน่งศูนย์กลางเพื่อแสดงตำแหน่งศูนย์กลาง
Output จากโค้ดดังกล่าวแสดงกราฟscatter plot การกระจายตัวของข้อมูลความสัมพันธ์ระหว่างรายได้ของแฟนคลับกับจำนวนครั้งที่ได้ซื้อตั๋วโดยที่จุดข้อมูลเป็นสีดำและจุดสีแดงในที่นี้แสดงถึงจุดศูนย์กลาง 3 จุดสำหรับแต่ละคลัสเตอร์เราได้เลือกจุดเหล่านี้แบบสุ่ม
ขั้นตอนที่ 4 จำลองกระบวนการK-Means Clustering แบบ manual
- คำนวณระยะห่างของแต่ละจุดกับ centroid ทุกตัว
- จัดกลุ่ม (assign cluster) ตามระยะที่ใกล้ที่สุด
- คำนวณ centroid ใหม่จากกลุ่มที่ได้
ทำซ้ำจนกว่าค่า centroid จะไม่เปลี่ยน (converge)
Output จากโค้ดดังกล่าวสดงความแตกต่างระหว่างจุดศูนย์กลางในการทำซ้ำครั้งก่อนและการทำซ้ำปัจจุบันเมื่อความแตกต่างนี้เป็น 0 เราจะหยุดการฝึกโมเดล
ขั้นตอนที่ 5แสดงผลลัพธ์ของการทำ K-Means Clusteringกำหนดสีสำหรับกลุ่มทั้ง 3 กลุ่ม
จุด X สีแดงขนาดใหญ่ แสดง ตำแหน่ง centroid ของแต่ละกลุ่ม แสดง legend (คำอธิบายสีแต่ละกลุ่ม)
Output จากโค้ดดังกล่าวจะแสดงกราฟภาพคลัสเตอร์ทั้งสาม
บทสรุป
K-means clustering เป็นวิธีการเรียนรู้แบบไม่ต้องมีการติดป้ายกำกับข้อมูล (unsupervised learning) ที่ใช้ในการจัดกลุ่มข้อมูลที่ยังไม่รู้ประเภทมาก่อน (unlabeled data) ให้อยู่ในกลุ่มเดียวกันตามความคล้ายคลึงกัน
ตัวอย่างของ k-means clustering คือ การนำจุดข้อมูลไปจับกลุ่มกับ centroid ที่ใกล้ที่สุด และทำการปรับกลุ่มไปเรื่อยๆ จนกว่าผลลัพธ์จะนิ่ง กล่าวอีกนัยหนึ่ง K-means clustering คือเทคนิคที่ช่วยลดระยะห่างระหว่างจุดข้อมูลและศูนย์กลางของกลุ่มที่มันอยู่ให้น้อยที่สุด
สำหรับบทความนี้ เราได้แสดงตัวอย่างการทำ k-means clustering จากข้อมูล 2 ชุด ได้แก่ข้อมูลของ การทำนายการขอสินเชื่อ (Loan Prediction Dataset) และ กลุ่มรายได้ของแฟนคลับกับจำนวนครั้งที่ได้ซื้อตั๋ว และสามารถลองเปลี่ยนตัวแปรเพื่อสร้างสมการ k-means clustering แบบอื่นๆ อีกได้ด้วยตัวเอง