ยินดีต้อนรับสู่โลกของ K-means Clustering!

สวัสดีครับ! ในระหว่างที่คุณเตรียมตัวสอบ Exam SRM คุณจะพบว่า การเรียนรู้แบบไม่มีผู้สอน (Unsupervised Learning) เป็นส่วนที่น่าสนใจที่สุดส่วนหนึ่งของเนื้อหาบทเรียน ต่างจากโมเดลการถดถอย (Regression) หรือการจำแนกประเภท (Classification) ที่คุณเคยเรียนมา (ซึ่งเราจะมีตัวแปรเป้าหมาย \(Y\) กำกับไว้) การเรียนรู้แบบไม่มีผู้สอนนั้นคือการค้นหารูปแบบที่ซ่อนอยู่ในข้อมูล โดยที่เราไม่มี "คำตอบ" หรือป้ายกำกับที่ชัดเจนคอยนำทางเราครับ

วันนี้เรามาดูกันที่ K-means clustering ลองคิดว่านี่คือศิลปะของการ "จัดกลุ่ม" ไม่ว่าคุณจะเป็นนักคณิตศาสตร์ประกันภัยที่ต้องการจัดกลุ่มผู้ถือกรมธรรม์ที่มีลักษณะคล้ายกัน หรือนักการตลาดที่ต้องการจัดกลุ่มลูกค้าตามพฤติกรรมการซื้อ K-means คือเครื่องมือที่คุณต้องรู้จักครับ ไม่ต้องกังวลหากมันดูมีหลักการที่ซับซ้อน เราจะมาค่อยๆ ถอดบทเรียนไปพร้อมกันทีละขั้นตอน!

K-means Clustering คืออะไร?

เป้าหมายของ K-means clustering นั้นง่ายมาก คือการแบ่งข้อมูลของเราออกเป็น K กลุ่ม (clusters) ที่ชัดเจนและไม่ซ้อนทับกัน โดยมีเงื่อนไขว่า:

1. ข้อมูลแต่ละตัวต้องอยู่ในกลุ่มใดกลุ่มหนึ่ง เพียงกลุ่มเดียวเท่านั้น
2. ข้อมูลที่อยู่ในกลุ่มเดียวกันต้องมีความ คล้ายคลึงกัน มากที่สุดเท่าที่จะเป็นไปได้
3. ข้อมูลที่อยู่คนละกลุ่มต้องมีความ แตกต่างกัน มากที่สุดเท่าที่จะเป็นไปได้

ตัวอย่างเปรียบเทียบในชีวิตประจำวัน

ลองจินตนาการว่าคุณมีกองผ้าที่ยังไม่ได้แยกประเภทกองใหญ่มาก คุณตัดสินใจว่าจะแยกผ้าออกมาเป็น K=3 กอง คุณอาจจะจัดกลุ่มเป็น "ผ้าสีเข้ม", "ผ้าขาว" และ "ผ้าสีอื่นๆ" เสื้อผ้าที่อยู่ในกอง "ผ้าขาว" จะมีความคล้ายกันมาก และมันจะแตกต่างจากกอง "ผ้าสีเข้ม" อย่างสิ้นเชิง นี่คือสิ่งที่ K-means ทำกับจุดข้อมูลนั่นเองครับ!

คณิตศาสตร์เบื้องหลัง: การนิยามคำว่า "ความคล้ายคลึง"

เพื่อที่จะจัดกลุ่มสิ่งต่างๆ เราจำเป็นต้องมีวิธีวัดว่าพวกมัน "ใกล้เคียง" กันแค่ไหน ใน K-means เราใช้ ระยะห่างแบบยูคลิดยกกำลังสอง (Squared Euclidean Distance) โดยอัลกอริทึมจะพยายามลดค่า ความแปรปรวนภายในกลุ่ม (Within-Cluster Variation) ให้เหลือน้อยที่สุด

ในทางคณิตศาสตร์ สำหรับกลุ่ม \(C_k\) จะเขียนได้ว่า:
\( W(C_k) = \sum_{i \in C_k} \sum_{j=1}^p (x_{ij} - \bar{x}_{kj})^2 \)

โดยที่:
- \(x_{ij}\) คือค่าของฟีเจอร์ที่ \(j\) ของข้อมูลตัวที่ \(i\)
- \(\bar{x}_{kj}\) คือ ค่าเฉลี่ย (mean) ของข้อมูลทั้งหมดในกลุ่มที่ \(k\) สำหรับฟีเจอร์นั้นๆ
- \(p\) คือจำนวนของฟีเจอร์ (ตัวแปร)

สรุปง่ายๆ ก็คือ: เราต้องการให้ระยะห่างระหว่างจุดข้อมูลแต่ละจุดกับ "จุดศูนย์กลาง" (ค่าเฉลี่ย) ของกลุ่มที่มันสังกัดอยู่ มีค่าให้ต่ำที่สุดเท่าที่จะเป็นไปได้นั่นเอง

อัลกอริทึมทำงานอย่างไร (ทีละขั้นตอน)

อัลกอริทึม K-means มีลักษณะเป็น กระบวนการทำซ้ำ (Iterative) คือจะทำขั้นตอนเดิมซ้ำไปเรื่อยๆ จนกว่าจะไม่สามารถปรับปรุงกลุ่มให้ดีขึ้นได้อีก ไม่ต้องตกใจไปถ้าตอนแรกดูเหมือนจะงง มันก็แค่การวนลูปซ้ำๆ ครับ!

ขั้นตอนที่ 1: เลือกค่า K ตัดสินใจว่าคุณต้องการแบ่งข้อมูลเป็นกี่กลุ่ม (เช่น \(K=3\))

ขั้นตอนที่ 2: เริ่มต้น (Initialize) สุ่มกำหนดกลุ่มตัวเลข 1 ถึง \(K\) ให้กับข้อมูลแต่ละตัว นี่คือการจัดกลุ่มเริ่มต้นที่ "ยังไม่นิ่ง" ของคุณ

ขั้นตอนที่ 3: ทำซ้ำ! ทำขั้นตอนต่อไปนี้ซ้ำจนกว่าการจัดกลุ่มจะไม่เปลี่ยนแปลงอีก:
    (a) หาจุดศูนย์กลาง (Centroids): สำหรับกลุ่มทั้ง \(K\) กลุ่ม ให้คำนวณหาค่าเฉลี่ยของจุดข้อมูลทั้งหมดที่อยู่ในกลุ่มนั้นๆ จุดนี้เรียกว่า Centroid
    (b) จัดกลุ่มใหม่ (Reassign Points): ดูที่ข้อมูลแต่ละตัว แล้วจัดให้มันไปอยู่ในกลุ่มที่มี Centroid ใกล้ที่สุด (โดยใช้ระยะห่างแบบยูคลิด)

เคล็ดลับสั้นๆ: Centroid คือ "ศูนย์รวมจิตใจ"

ให้คิดว่า Centroid คือ "ตัวแทนของกลุ่ม" ในขั้นตอนที่ 3b ข้อมูลแต่ละจุดจะมองไปรอบๆ แล้วถามตัวเองว่า "ฉันดูเหมือน 'ตัวแทนกลุ่ม' คนไหนมากที่สุด?" แล้วก็ย้ายตัวเองไปอยู่กับกลุ่มนั้นครับ

รายละเอียดสำคัญ: ค่าเหมาะสมที่สุดเฉพาะที่ (Local Optima)

K-means เปรียบเสมือนการเดินป่าในหุบเขาตอนกลางคืน คุณต้องการหาจุดที่ต่ำที่สุดของหุบเขา (คือ Global Optimum) แต่คุณอาจจะเผลอไปติดอยู่ในแอ่งเล็กๆ ระหว่างทางขึ้นเขาได้ (ซึ่งเรียกว่า Local Optimum)

เนื่องจากอัลกอริทึมเริ่มต้นด้วยการสุ่มจัดกลุ่ม ผลลัพธ์สุดท้ายจึงอาจเปลี่ยนไปตามจุดเริ่มต้นของคุณได้
ประเด็นสำคัญสำหรับสอบ: เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด สิ่งสำคัญคือการรันอัลกอริทึม K-means หลายๆ ครั้ง โดยใช้การสุ่มจุดเริ่มต้นที่แตกต่างกันในแต่ละรอบ แล้วเลือกผลลัพธ์จากรอบที่ให้ค่าความแปรปรวนภายในกลุ่มรวม (Total within-cluster variation) ต่ำที่สุด

ความสำคัญของการปรับสเกล (Scaling)

เรื่องนี้เป็นหัวข้อที่ออกสอบบ่อยมากใน Exam SRM! เนื่องจาก K-means อาศัย ระยะห่าง สเกลของตัวแปรของคุณจึงมีความสำคัญอย่างมหาศาล

ตัวอย่าง: หากคุณกำลังจัดกลุ่มลูกค้าโดยดูจาก อายุ (ช่วง 0–100 ปี) และ รายได้ต่อปี (ช่วง 0–200,000 บาท) ตัวแปรรายได้จะมีอิทธิพลเหนือการคำนวณระยะห่างมาก เพราะตัวเลขมีขนาดใหญ่กว่ามาก ความต่างของรายได้เพียง 1,000 บาท จะดู "ไกล" กว่าความต่างของอายุถึง 50 ปี

วิธีแก้: ให้ทำการ ปรับมาตรฐาน (standardize) ตัวแปรของคุณเสมอ (ค่าเฉลี่ย = 0, ส่วนเบี่ยงเบนมาตรฐาน = 1) ก่อนที่จะรัน K-means เพื่อให้ตัวแปรแต่ละตัวมี "คะแนนโหวต" ที่เท่าเทียมกันในกระบวนการจัดกลุ่ม

การเลือกจำนวนกลุ่ม (K)

เราจะรู้ได้อย่างไรว่าควรใช้ 2 กลุ่ม หรือ 10 กลุ่มดี?
เมื่อเราเพิ่มค่า \(K\) ขึ้นไป ค่าความแปรปรวนภายในกลุ่มจะ ลดลงเสมอ (ถ้าข้อมูลแต่ละจุดมีกลุ่มเป็นของตัวเอง ความแปรปรวนก็จะเป็นศูนย์!)

เรามักจะใช้ วิธี Elbow (Elbow Method) โดยพล็อตค่าความแปรปรวนภายในกลุ่มรวมเทียบกับค่า \(K\) จากนั้นมองหา "ข้อศอก" ของกราฟ ซึ่งก็คือจุดที่การเพิ่มจำนวนกลุ่มเข้าไปอีกไม่ได้ช่วยลดความแปรปรวนลงอย่างมีนัยสำคัญอีกต่อไป จุดหักศอกนี้มักจะเป็นจุดที่เหมาะสมสำหรับค่า \(K\)

ข้อควรระวังและความผิดพลาดที่ควรหลีกเลี่ยง

1. ลืมปรับสเกล: อย่างที่กล่าวไป หากคุณไม่ปรับสเกล ผลลัพธ์ของคุณจะเอนเอียงไปทางตัวแปรที่มีช่วงกว้างๆ
2. ค่าผิดปกติ (Outliers): K-means อ่อนไหวต่อค่าผิดปกติมาก จุดเพียงจุดเดียวที่อยู่ห่างไกลออกไปอาจดึง Centroid ให้ห่างจากกลุ่มส่วนใหญ่ได้
3. ข้อมูลเชิงคุณภาพ (Categorical Data): K-means ถูกออกแบบมาสำหรับ ข้อมูลเชิงปริมาณ (เพราะคุณไม่สามารถหา "ค่าเฉลี่ย" ของสีหรือชื่อได้อย่างง่ายดาย)
4. รูปทรงที่ไม่เป็นวงกลม: K-means ชอบกลุ่มที่มีลักษณะเป็นก้อนกลมๆ หากข้อมูลของคุณมีรูปร่างยาวเหมือนงูหรือพระจันทร์เสี้ยว K-means จะหาไม่ค่อยเจอครับ

กรอบทบทวนสั้นๆ

- ประเภท: การเรียนรู้แบบไม่มีผู้สอน (Unsupervised Learning)
- เป้าหมาย: ลดความแปรปรวนภายในกลุ่ม (Minimize within-cluster variation)
- ตัวชี้วัด: ระยะห่างแบบยูคลิดยกกำลังสอง (Squared Euclidean distance)
- สิ่งที่ต้องทำ: ปรับสเกล/มาตรฐานข้อมูล (Scale/Standardize) ก่อนเสมอ!
- จุดอ่อน: อาจติดกับดักค่าเหมาะสมที่สุดเฉพาะที่ (Local optima); อ่อนไหวต่อ Outliers

สรุป: ประเด็นสำคัญที่ควรจำ

K-means เป็นอัลกอริทึมที่เรียบง่ายแต่ทรงพลังสำหรับการค้นหากลุ่มในข้อมูลของคุณ มันทำงานโดยการคำนวณ centroids ซ้ำๆ และจัดกลุ่มข้อมูลใหม่ตามจุดศูนย์กลางที่ใกล้ที่สุด เนื่องจากมันอ่อนไหวต่อการสุ่มเริ่มต้น ดังนั้นควรทำหลายๆ ครั้งเสมอ สุดท้ายนี้ จำไว้ว่าการเตรียมข้อมูล (การปรับมาตรฐานข้อมูล) มีความสำคัญพอๆ กับตัวอัลกอริทึมเองเลยครับ!

รู้หรือไม่? K-means มักถูกใช้ในการบีบอัดไฟล์ภาพ! โดยการจัดกลุ่มสีพิกเซลที่คล้ายกันเข้าด้วยกัน คุณสามารถแทนภาพที่มีรายละเอียดซับซ้อนด้วย "จานสี" ที่เล็กลงมาก ช่วยประหยัดพื้นที่ไฟล์ได้ครับ

หมั่นฝึกฝนแนวคิดเหล่านี้ แล้วคุณจะพิชิตส่วนของการเรียนรู้แบบไม่มีผู้สอนใน Exam SRM ได้อย่างสบายๆ เลยครับ! สู้ๆ นะครับคุณทำได้แน่นอน!