K-Means Clustering with Elbow Method

Paul
KBTG Life
Published in
3 min readMar 4, 2021

บทความนี้เราจะมาอธิบายถึงวิธีการจัดกลุ่มของข้อมูลที่เป็นแบบ Unsupervised Learning โดยใช้วิธี K-Mean Clustering และใช้ Elbow Method เพื่อหาจำนวน Cluster ที่เหมาะสมที่สุด

K-Means Clustering เป็นหนึ่งวิธีที่ได้รับความนิยมอย่างมากสำหรับวิธีการจัดกลุ่มของข้อมูลแบบ Unsupervised Learning โดยเราจะทราบกันดีว่าข้อมูลส่วนใหญ่ที่เราพบเจอกันนั้นเป็นแบบ Unlabeled เคสที่เรามักพบเห็นบ่อยๆ เช่น การแบ่งระยะของผู้ป่วยโรคมะเร็งว่าป่วยระยะที่เท่าไหร่ บางครั้งในชีวิตจริงเราอาจจะไม่มีเวลามากพอที่จะมาจัดระยะเองแบบ Manual ดังนั้นเราจะยืมมือ Machine มาช่วยจัดกลุ่ม โดยที่เราทราบดีว่ามีทั้งหมดกี่ระยะ เพราะ Machine จะทำหน้าที่เพียงแค่จัดเป็นกลุ่มให้ จากนั้นเราต้องเป็นคนนำข้อมูลมาตีความเอง เราจึงจำเป็นต้องศึกษาและทำความเข้าใจข้อมูลของเราเป็นอย่างดี

K-Means Algorithm

Source: https://th.wikipedia.org/wiki/การแบ่งกลุ่มข้อมูลแบบเคมีน

เรามาเริ่มทำความเข้าใจเกี่ยวกับกระบวนการทำงานของ K-Means ด้วยภาพด้านบนกันเลยค่ะ จากภาพด้านบนมี k = 3 เพื่อนๆ อาจจะสังเกตเห็นวิธีการทำงานที่มีอยู่ด้วยกัน 4 ขั้นตอน ดังนี้

Step 1: สุ่มเลือกค่ากลางของแต่ละกลุ่มข้อมูล (Centroids) จากภาพก็คือจุดสีแดง เหลือง และน้ำเงิน ทั้งหมด 3 จุด

Step 2: หากจุดข้อมูลใดใกล้เคียงกับกลุ่มใดที่สุดจะถูกกำหนดให้อยู่กลุ่มนั้น โดยเราจะลากเส้นตรง (Boundary Line) ตั้งฉากกับเส้นตรงที่แทนระยะห่างระหว่าง Centroids และเส้นตรงนี้จะใช้แบ่งชุดข้อมูลออกเป็นกลุ่มอย่างชัดเจน

Euclidean Distance

Step 3: จากการที่เราแบ่งข้อมูลออกเป็นกลุ่มเรียบร้อยแล้ว ก็ถึงเวลาที่เราต้องทำการอัพเดต Centroids ใหม่ โดยคำนวณจากค่าเฉลี่ยของระยะห่างระหว่างสมาชิกที่อยู่ในแต่ละกลุ่มกับ Centroids นั้นๆ

Step 4: มาถึงขั้นตอนสุดท้ายซึ่งง่ายมากๆ คือเราจะทำขั้นตอนที่ 2 และ 3 วนซ้ำๆ จนกว่า Centroids ของแต่ละกลุ่มจะคงที่ไม่เปลี่ยนแปลง และเราก็จะได้ข้อมูลที่แบ่งเป็นกลุ่มๆ (Cluster) พร้อมนำไปใช้งานแล้วค่ะ

ตัวอย่าง

เพื่อเป็นการทำให้มองเห็นภาพมากขึ้น เรามาลองดูตัวอย่างการใช้งาน K-Means Clustering กับ Dataset ยอดนิยมอย่าง Titanic โดยทำการจัดกลุ่มผู้โดยสารออกเป็นผู้รอดชีวิตและเสียชีวิต จากนั้นนำมาตรวจสอบความแม่นยำกับเฉลยที่มีอยู่แล้ว โดยเพื่อนๆสามารถเข้าไปดูโค้ดที่ https://github.com/Paul-poo/Titanic ได้เลย ^^

ถึงตรงนี้เป็นอย่างไรกันบ้าง พอจะช่วยให้เพื่อนๆ เข้าใจเกี่ยวกับ K-Means Clustering มากขึ้นใช่ไหม แต่เดี๋ยวก่อนนะคะ แล้วถ้าหากข้อมูลของเรามีมากมายมหาศาลจนเราไม่สามารถกำหนดได้ว่าจะต้องแบ่งชุดข้อมูลออกเป็นกี่กลุ่ม จะต้องใช้ k เท่าไรดีจึงจะสามารถแบ่งข้อมูลออกเป็นกลุ่มๆ อย่างชัดเจน ไม่ต้องกังวลไปค่ะ เรามีวิธีที่เรียกว่า Elbow Method ที่จะมาช่วยเราหาจำนวน Cluster (k) ที่เหมาะสมกับชุดข้อมูลของเรามากที่สุด

Elbow Method เป็นวิธีการ Minimize ค่าคลาดเคลื่อน (Error) ของผลรวมของระยะห่างระหว่าง Data Point กับ Centroid ของทุกๆ Clusters โดยค่าคลาดเคลื่อนที่ว่านี้เรียกว่า Inertia หรือ Within-cluster Sum-of-squares Criterion:

เราลองมาดูตัวอย่างการใช้งานของ Elbow Method กันดีกว่าค่ะ

เริ่มจากการทดลองใช้ k ตั้งแต่ 1 ถึง 9 โดยใช้ For Loop วนเพื่อทำการ Fit Data และ Append kmeanModel.inertia ซึ่งเป็นค่าคลาดเคลื่อนตามรายละเอียดข้างต้นลงใน List หลังจากที่ทำการวนลูปครบแล้ว เราจะทำการพล็อต (x = K และ y = inertia) ตามภาพด้านล่างนี้ เสร็จแล้วลากเส้นตรงสีฟ้าเชื่อมระหว่างจุดปลายทั้งสองของกราฟ และลากเส้นตรงสีแดงตั้งฉากกับเส้นตรงสีฟ้า เพื่อหาจุดที่มีระยะห่างจากเส้นตรงสีฟ้ามากที่สุด จากภาพนี้คือ k = 3 เราก็ได้จำนวน Cluster ของชุดข้อมูลเป็น 3 Clusters

สรุป

K-Means Clustering เป็นวิธีที่ถือว่าฮิตมากสำหรับการแบ่งกลุ่มของข้อมูลแบบ Unsupervised Learning แต่อาจจะยังมีข้อเสียในเรื่องของการสุ่มค่า Initial Centroids แต่ไม่ต้องกังวลไปนะคะ เรายังมีวิธีการแบ่งกลุ่มข้อมูล (Clustering) แบบอื่นให้เราได้ศึกษาและนำมาประยุกต์ใช้ให้เหมาะสมกับลักษณะข้อมูลของเราอีกหลากหลายวิธี เช่น Hierarchical Clustering, Mean-Shift Clustering, etc.

^^ เย้!!! จบแล้วสำหรับ K-Means Clustering เป็นอย่างไรกันบ้างคะ หวังว่าเพื่อนๆ จะพอมองเห็นภาพและเข้าใจเกี่ยวกับเรื่องนี้มากขึ้นนะคะ หากใครมีข้อคิดเห็นอื่นใด สามารถคอมเมนต์กันมาได้เลยนะคะ ^^

--

--