K-means จัดกลุ่มข้อมูล (Clustering) ใน Machine Learning ด้วย Python
K-means คือ วิธีการแบ่งกลุ่ม (clustering) ที่นิยมใช้ใน Machine Learning ซึ่งมีจุดประสงค์เพื่อแบ่งข้อมูลออกเป็นกลุ่มย่อยๆ โดยที่กลุ่มที่เกิดจะมีความคล้ายคลึงกันในแต่ละกลุ่ม ซึ่งจะช่วยให้เราเข้าใจและวิเคราะห์ข้อมูลได้ง่ายขึ้น การแบ่งกลุ่มด้วย K-means จะใช้วิธีการคำนวณศูนย์กลางของแต่ละกลุ่ม ซึ่งจะถูกนำมาใช้ในการแบ่งข้อมูลในแต่ละกลุ่ม
K-means จะทำการแบ่งข้อมูลออกเป็นกลุ่มๆ ตามลักษณะหรือลักษณะเด่นที่เหมือนกัน โดยใช้วิธีการหาจุดศูนย์กลาง (centroid) ของแต่ละกลุ่ม และคำนวณระยะห่างของแต่ละจุดจากจุดศูนย์กลางนั้น แล้วจัดกลุ่มข้อมูลตามระยะห่างที่น้อยที่สุด ในขั้นตอนแรกจะกำหนดจุดศูนย์กลางเอง (Random initialization) และคำนวณระยะห่างของแต่ละจุดจากจุดศูนย์กลาง จากนั้นกำหนดจุดศูนย์กลางใหม่จากเฉลี่ยของจุดที่อยู่ในกลุ่มเดียวกัน และทำซ้ำขั้นตอนการจัดกลุ่มและคำนวณจุดศูนย์กลางไปเรื่อยๆ จนกว่าจุดศูนย์กลางแต่ละกลุ่มจะเข้าใกล้จุดที่ไม่เปลี่ยนแปลงมากเพียงพอ (Convergence) และจบการทำงานของอัลกอริทึม
K ในชื่อ K-means หมายถึงจำนวนกลุ่ม (clusters) ที่ต้องการจัดข้อมูลเป็น ซึ่งจำนวน K จะต้องกำหนดไว้ก่อนทำการสร้างโมเดล K-means และจะต้องคำนึงถึงการเลือกค่า K ให้เหมาะสมกับปัญหา โดยจะต้องพิจารณาจำนวนข้อมูลและลักษณะเด่นของข้อมูลด้วย
K-means เป็นอัลกอริทึมในการจัดกลุ่มของข้อมูล (Clustering) ที่มักถูกนำมาใช้ในงาน Machine Learning โดยตัวอย่างการใช้งานที่ได้รับความนิยมคือการแบ่งกลุ่มลูกค้า (customer segmentation) และการจัดกลุ่มของข้อมูลภาพ (image segmentation)
วิธีการทำงานของ K-means คือ การจัดกลุ่มของข้อมูลโดยใช้จุดศูนย์กลาง (centroid) ของกลุ่มเป็นตัวแทนของกลุ่มนั้นๆ โดยมีขั้นตอนดังนี้
-
กำหนดจำนวนกลุ่ม (K) ที่ต้องการจัดกลุ่มข้อมูล
-
สุ่มเลือกจุดศูนย์กลางสำหรับแต่ละกลุ่มเริ่มต้น
-
คำนวณหาความห่างระหว่างจุดข้อมูลกับจุดศูนย์กลางของแต่ละกลุ่ม และกำหนดให้จุดข้อมูลเข้ากลุ่มที่มีความห่างจากจุดศูนย์กลางน้อยที่สุด
-
คำนวณหาจุดศูนย์กลางใหม่ของแต่ละกลุ่มโดยใช้ข้อมูลทั้งหมดในกลุ่มนั้นๆ
-
ทำซ้ำขั้นตอนที่ 3-4 จนกว่าจุดศูนย์กลางจะไม่เปลี่ยนแปลงอีกต่อไป
-
แบ่งข้อมูลเป็นกลุ่มตามจุดศูนย์กลางที่ได้
การใช้ K-means สามารถช่วยในการวิเคราะห์ข้อมูลให้เข้าใจง่ายขึ้น โดยเฉพาะเมื่อมีจำนวนข้อมูลมากมาย หรือมีข้อมูลหลายมิติ ที่อยู่ในช่วงเดียวกัน การใช้ K-means ช่วยให้เราสามารถแบ่งข้อมูลเหล่านี้ออกเป็นกลุ่มเล็กๆ ที่มีความคล้ายคลึงกัน ซึ่งจะช่วยให้ง่ายต่อการจัดการและวิเคราะห์ข้อมูลในภายหลังได้เป็นอย่างมาก
การจัดกลุ่มข้อมูล (unsupervised learning) ใน K-means มีวัตถุประสงค์เพื่อทำการแบ่งกลุ่มข้อมูลที่มีความคล้ายคลึงกันเข้าด้วยกันในกลุ่มเดียวกัน โดย K จะแทนจำนวนกลุ่มที่ต้องการจัดกลุ่มข้อมูลเป็นต้นแบบ จะเลือกค่า K ที่เหมาะสมสำหรับข้อมูลของเรา เช่น ถ้าเรามีข้อมูลที่แบ่งเป็นสองกลุ่มอยู่แล้ว ก็สามารถกำหนด K=2 ได้ หากไม่มีข้อมูลกลุ่มต้นแบบ ก็สามารถใช้เทคนิคต่างๆ เช่น elbow method, silhouette method หรือ gap statistic เพื่อช่วยกำหนดค่า K ที่เหมาะสมได้
เมื่อกำหนดค่า K แล้ว K-means จะทำการแบ่งกลุ่มข้อมูลโดยมองว่าข้อมูลทั้งหมดเป็นจุดบนกระจายของช่องว่างหรือพื้นที่สองมิติ จากนั้นทำการจัดกลุ่มด้วยวิธีการหาจุดศูนย์กลาง (centroid) ซึ่งเป็นจุดที่อยู่ตรงกลางของกลุ่ม โดยใช้วิธีการคำนวณระยะห่าง Euclidean distance ระหว่างจุดบนกระจายกับจุดศูนย์กลางของแต่ละกลุ่ม เพื่อหาว่าจุดบนกระจายนั้นอยู่ใกล้กับจุดศูนย์กลางของกลุ่มไหนมากที่สุด จากนั้นจัดกลุ่มข้อมูลตามจุดศูนย์กลางที่ได้
การเลือกค่า K เป็นข้อสำคัญในการใช้ K-means โดยทั่วไปจะต้องใช้วิธีทดสอบหลายๆ ค่า K เพื่อหาค่าที่เหมาะสมสำหรับชุดข้อมูลนั้นๆ และการปรับค่า K ก็เป็นกระบวนการที่ซับซ้อน โดยอาจใช้หลายวิธี ซึ่งได้แก่ Elbow Method และ Silhouette Method
-
Elbow Method: วิธีนี้ใช้หาจุดที่ชันลดลงของกราฟหลังจาก plot ค่า SSE (Sum of Squared Errors) โดย SSE คือผลรวมของระยะห่างระหว่างจุดใน cluster แต่ละกลุ่มโดยยกกำลังสอง จุดที่ชันลดลงเร็วที่สุดคือจุดที่เหมาะสมที่สุดสำหรับค่า K นั้น
-
Silhouette Method: วิธีนี้ใช้วัดระยะห่างภายในและระยะห่างระหว่าง cluster แต่ละกลุ่ม ด้วยค่า silhouette coefficient ซึ่งเป็นค่าที่อยู่ระหว่าง -1 ถึง 1 โดยค่าที่ใกล้ 1 แสดงว่าความคล้ายคลึงระหว่างสมาชิกใน cluster เป็นอย่างมาก และค่าที่ใกล้ -1 แสดงว่าสมาชิกใน cluster มีความแตกต่างกันมาก สำหรับค่า K ที่เหมาะสมที่สุดคือค่า K ที่มีค่า silhouette coefficient มากที่สุด
ด้วยความซับซ้อนของกระบวนการการปรับค่า K และวิธีการทดสอบต่างๆ การใช้ K-means ต้องใช้ความรอบคอบและความระมัดระวังในการเลือกค่า K ที่เหมาะสมสำหรับชุดข้อมูลนั้นๆ
K-means เป็นเทคนิคการแบ่งกลุ่มที่นิยมใช้ในการวิเคราะห์ข้อมูล
มีการนำไปใช้งานในงานต่างๆ อย่างกว้างขวางในการประยุกต์ใช้ K-means ตัวอย่างเช่น
-
การจัดกลุ่มลูกค้า
K-means สามารถนำมาใช้จัดกลุ่มลูกค้าในธุรกิจต่างๆ เพื่อทำการตลาดและวิเคราะห์ตลาด เช่น ร้านค้าออนไลน์สามารถใช้ K-means เพื่อแบ่งกลุ่มลูกค้าที่มีความสนใจในสินค้าเดียวกันเพื่อจัดโปรโมชั่นหรือแนะนำสินค้าต่อไปได้ -
การวิเคราะห์ข้อมูลโรค
K-means สามารถนำมาใช้ในการวิเคราะห์ข้อมูลเกี่ยวกับโรค เช่น การแบ่งกลุ่มผู้ป่วยที่มีลักษณะการเป็นโรคเดียวกันเพื่อให้สามารถตรวจสอบอาการ และวิเคราะห์ผลของการรักษาได้ -
การวิเคราะห์เว็บไซต์
K-means สามารถนำมาใช้ในการวิเคราะห์เว็บไซต์เพื่อแบ่งกลุ่มข้อมูลต่างๆ เช่น การแบ่งกลุ่มบทความที่มีเนื้อหาเดียวกัน เพื่อให้สามารถจัดการและวิเคราะห์ข้อมูลบนเว็บไซต์ได้สะดวกขึ้น -
การวิเคราะห์ภาพถ่าย
K-means สามารถนำมาใช้ในการวิเคราะห์ภาพถ่าย เช่น การแบ่งกลุ่มภาพถ่ายที่มีลักษณะเด่นเด่นเหมือนกัน เป็นต้น -
การจัดกลุ่มสินค้าในร้านค้าออนไลน์
หากเรามีร้านค้าออนไลน์และมีสินค้ามากมาย เราอาจใช้ K-means เพื่อจัดกลุ่มสินค้าให้ง่ายต่อการจัดแสดงและช่วยให้ผู้ซื้อเลือกสินค้าได้ง่ายขึ้น -
การจัดกลุ่มผู้ใช้บริการ
บริษัทที่ให้บริการออนไลน์อาจใช้ K-means เพื่อจัดกลุ่มลูกค้าที่มีความต้องการและพฤติกรรมการใช้บริการที่คล้ายกัน เพื่อให้สามารถจัดทีมงานและพัฒนาบริการให้เหมาะสมกับกลุ่มลูกค้าได้อย่างมีประสิทธิภาพ -
การจัดกลุ่มข้อมูลในสังคมออนไลน์
ในสังคมออนไลน์ เราสามารถใช้ K-means เพื่อจัดกลุ่มโพสต์ ความคิดเห็น หรือโพรไฟล์ผู้ใช้ เพื่อให้สามารถสื่อสารและแบ่งปันข้อมูลได้อย่างมีประสิทธิภาพ -
การจัดกลุ่มออกกำลังกาย
หากเรามีแอปพลิเคชันสำหรับการออกกำลังกาย เราอาจใช้ K-means เพื่อจัดกลุ่มวิธีการออกกำลังกายที่เหมาะสมสำหรับแต่ละกลุ่มผู้ใช้ เช่น กลุ่มผู้ที่ต้องการลดน้ำหนัก กลุ่มผู้ที่อยากเสริมสร้างกล้ามเนื้อ เป็นต้น
ตัวอย่าง
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# สร้าง dataset ที่มีขนาด 200 x 2 โดยใช้ numpy
np.random.seed(0)
X = np.random.randn(200, 2)
# กำหนดจำนวนกลุ่ม (clusters) ที่ต้องการจัดกลุ่ม
n_clusters = 3
# สร้าง KMeans object และ fit กับ dataset
kmeans = KMeans(n_clusters=n_clusters, random_state=0)
kmeans.fit(X)
# แสดง centroid ของแต่ละกลุ่ม
print('Centroids:', kmeans.cluster_centers_)
# แสดง label ของแต่ละ data point
labels = kmeans.labels_
print('Labels:', labels)
# สร้าง scatter plot ของข้อมูล โดยให้แต่ละกลุ่มมีสีต่างกัน
plt.scatter(X[:,0], X[:,1], c=labels)
plt.title('K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
ผลลัพธ์ที่ได้ คือ กราฟ scatter plot ของข้อมูลที่ถูกจัดกลุ่มด้วย K-means ซึ่งแต่ละกลุ่มจะมีสีต่างกันดังนี้
Centroids: [[ 0.9974667 0.21024464]
[-0.40348593 -0.90251605]
[-0.79049118 0.83430533]]
Labels: [0 0 0 0 2 2 0 0 0 1 2 0 0 1 0 0 1 2 0 1 1 2 1 2 2 2 1 2 0 1 1 1 1 2 2 0 0
1 1 2 2 1 0 0 2 2 2 0 2 0 0 2 2 1 0 0 2 2 0 0 1 2 1 2 0 2 2 2 0 1 2 0 0 2
1 2 1 1 0 1 2 0 2 1 0 0 0 2 1 2 1 1 1 2 2 2 1 0 0 0 1 0 1 1 0 0 0 1 2 0 1
2 2 0 1 1 2 2 1 0 1 1 1 0 1 0 1 0 1 2 1 1 2 0 2 1 0 1 0 2 2 2 0 2 0 1 0 2
2 2 2 1 0 1 0 2 1 2 1 1 1 1 1 2 2 1 1 2 2 2 0 1 1 2 0 1 0 1 1 2 0 0 0 1 1
1 0 2 1 2 2 1 1 1 0 0 1 1 0 0]
จากตัวอย่าง ได้ใช้ K-means จัดกลุ่มข้อมูลใน dataset 2 มิติที่สร้างขึ้นมา จำนวน 200 จุด โดยกำหนดจำนวนกลุ่ม (clusters) เป็น 3 กลุ่ม จากนั้นทำการ fit กับ dataset ด้วย KMeans object จากนั้นแสดง centroid ของแต่ละกลุ่มและ label ของแต่ละ data point ที่ถูกจัดกลุ่ม ในท้ายที่สุดจะได้รูปแผนภาพ scatter plot ของข้อมูลที่แสดงแต่ละกลุ่มด้วยสีต่างกัน โดยใช้ matplotlib ในการสร้างกราฟ ซึ่งใช้งาน K-means ในการจัดกลุ่มข้อมูล (clustering) โดยมีขั้นตอนการทำงานดังนี้:
- สร้าง dataset ขึ้นมาโดยใช้ numpy โดยจำนวนข้อมูลคือ 200 และมี 2 features
- กำหนดจำนวนกลุ่ม (clusters) ที่ต้องการจัดกลุ่ม
- สร้าง KMeans object และ fit กับ dataset
- แสดง centroid ของแต่ละกลุ่ม
- แสดง label ของแต่ละ data point
- วาด scatter plot ของข้อมูล โดยให้แต่ละกลุ่มมีสีต่างกัน
ผลลัพธ์ที่ได้คือ scatter plot ของข้อมูลที่ถูกจัดกลุ่มด้วย K-means algorithm โดยแต่ละกลุ่มจะมีสีต่างกัน และ centroid ของแต่ละกลุ่มจะถูกแสดงด้วยตัวก้าวหน้า (x) บนกราฟ
หากต้องการใช้ K-means ในการจัดกลุ่มข้อมูล ผู้ใช้งานสามารถดัดแปลงโค้ดดังกล่าวให้เหมาะสมกับข้อมูลของตนเองได้ โดยการเปลี่ยนแปลงจำนวนกลุ่ม หรือการเพิ่ม features ของข้อมูล เพื่อให้การจัดกลุ่มด้วย K-means algorithm เหมาะสมกับการแก้ปัญหาที่ต้องการด้วย Machine Learning ของผู้ใช้งาน
ตัวอย่าง การใช้ K-means clustering จัดกลุ่มข้อมูลสัตว์เป็น 5 กลุ่ม สัตว์ 10 ชนิด จากน้ำหนักและอายุ
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# สร้าง dataset ของข้อมูลเกี่ยวกับสัตว์
np.random.seed(0)
# ชื่อสัตว์
animal_names = ['Cat', 'Dog', 'Rabbit', 'Hamster', 'Fish', 'Bird', 'Snake', 'Lizard', 'Turtle', 'Frog']
# ข้อมูลเกี่ยวกับสัตว์
animal_features = np.array([[2, 4, 2, 3, 0.5, 1, 0.5, 1, 0.5, 1], # น้ำหนัก (kg)
[4, 8, 3, 5, 0.2, 2, 0.2, 2, 1.5, 0.5]]) # อายุ (ปี)
# สุ่มตำแหน่งของข้อมูล
X = animal_features.T + 0.3 * np.random.randn(10, 2)
# กำหนดจำนวนกลุ่ม (clusters) ที่ต้องการจัดกลุ่ม
n_clusters = 5
# สร้าง KMeans object และ fit กับ dataset
kmeans = KMeans(n_clusters=n_clusters, random_state=0)
kmeans.fit(X)
# แสดง centroid ของแต่ละกลุ่ม
print('Centroids:', kmeans.cluster_centers_)
# แสดง label ของแต่ละ data point
labels = kmeans.labels_
print('Labels:', labels)
# สร้าง scatter plot ของข้อมูล โดยให้แต่ละกลุ่มมีสีต่างกัน
colors = ['red', 'blue', 'green', 'purple', 'orange']
for i in range(n_clusters):
plt.scatter(X[labels == i, 0], X[labels == i, 1], s=50, c=colors[i], label='Cluster %d' % (i + 1))
# ปรับแต่งกราฟ
plt.title('Animal Clustering')
plt.xlabel('Weight (kg)')
plt.ylabel('Age (years)')
plt.legend()
plt.show()
ผลลัพธ์ที่ได้ คือ
Centroids: [[ 1.04153192 1.99161229]
[ 0.76375532 0.26781778]
[ 4.2936214 8.67226796]
[ 2.90712111 4.53732 ]
[ 2.5602674 2.70681664]]
Labels: [3 2 4 3 1 0 1 0 0 1]
จากตัวอย่าง เป็นการใช้ K-means Clustering กับข้อมูลเกี่ยวกับสัตว์ โดยมีข้อมูลดังนี้
- ชื่อสัตว์: [‘Cat’, ‘Dog’, ‘Rabbit’, ‘Hamster’, ‘Fish’, ‘Bird’, ‘Snake’, ‘Lizard’, ‘Turtle’, ‘Frog’]
- ข้อมูลเกี่ยวกับสัตว์: มี 2 คุณสมบัติคือ น้ำหนัก (kg) และ อายุ (ปี)
- สุ่มตำแหน่งของข้อมูล: โดยการเพิ่มความสุ่มให้กับตำแหน่งของข้อมูล
โดยกำหนดให้จำนวนกลุ่มที่ต้องการจัดกลุ่มเป็น 5 กลุ่ม และเมื่อ fit model ด้วย KMeans algorithm แล้ว จะได้ centroid ของแต่ละกลุ่ม และ label ของแต่ละ data point ออกมา
ในส่วนของการ visualize ผลลัพธ์ โค้ดจะทำการวาด scatter plot ของข้อมูล โดยแต่ละกลุ่มจะมีสีต่างกัน โดยกำหนดสีแต่ละกลุ่มด้วย colors = [‘red’, ‘blue’, ‘green’, ‘purple’, ‘orange’] โดยใช้ข้อมูลจาก label ของแต่ละ data point เพื่อแยกสีของแต่ละกลุ่ม นอกจากนี้ โค้ดยังปรับแต่งกราฟด้วยการตั้งชื่อกราฟและแกน x และ y และเพิ่ม legend เพื่อแสดงชื่อแต่ละกลุ่ม
ในกรณีนี้ หากผลลัพธ์ที่ได้ไม่เหมาะสมกับข้อมูลหรือไม่ตรงกับความคาดหวัง อาจต้องทำการปรับพารามิเตอร์ของ K-means algorithm หรือเลือก algorithm อื่นที่เหมาะสมกับข้อมูลด้วย
ตัวอย่าง การใช้ K-means clustering จัดกลุ่มสินค้าเป็น 5 กลุ่ม จากสินค้า 10 ชนิด โดยมีข้อมูลเกี่ยวกับสินค้า คือ ราคา กับ คะแนนความนิยม
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# สร้าง dataset ของข้อมูลเกี่ยวกับสินค้า
np.random.seed(0)
# ชื่อสินค้า
product_names = ['T-shirt', 'Jeans', 'Sneakers', 'Watch', 'Backpack', 'Headphones', 'Smartphone', 'Laptop', 'Camera', 'Gaming console']
# ข้อมูลเกี่ยวกับสินค้า
product_features = np.array([[200, 50, 150, 5000, 100, 2000, 15000, 40000, 30000, 20000], # ราคา (บาท)
[0.2, 0.5, 0.3, 0.1, 0.5, 0.1, 0.2, 1.5, 1, 2]]) # ความนิยม (คะแนน 0-1)
# สุ่มตำแหน่งของข้อมูล
X = product_features.T + 0.1 * np.random.randn(10, 2)
# กำหนดจำนวนกลุ่ม (clusters) ที่ต้องการจัดกลุ่ม
n_clusters = 5
# สร้าง KMeans object และ fit กับ dataset
kmeans = KMeans(n_clusters=n_clusters, random_state=0)
kmeans.fit(X)
# แสดง centroid ของแต่ละกลุ่ม
print('Centroids:', kmeans.cluster_centers_)
# แสดง label ของแต่ละ data point
labels = kmeans.labels_
print('Labels:', labels)
# วาด scatter plot ของข้อมูล โดยให้แต่ละกลุ่มมีสีต่างกัน
colors = ['red', 'blue', 'green', 'purple', 'orange']
for i in range(n_clusters):
plt.scatter(X[labels == i, 0], X[labels == i, 1], s=50, c=colors[i], label='Cluster %d' % (i + 1))
# ปรับแต่งกราฟ
plt.title('Product Clustering')
plt.xlabel('Price (Baht)')
plt.ylabel('Popularity (score)')
plt.legend()
plt.show()
ผลลัพธ์ที่ได้ คือ
Centroids: [[ 5.00009501e+03 8.48642792e-02]
[ 3.00001494e+04 9.79484174e-01]
[ 1.75000537e+04 1.06337896e+00]
[ 4.00000444e+04 1.53336743e+00]
[ 5.00093023e+02 3.90572891e-01]]
Labels: [4 4 4 0 4 4 2 3 1 2]
จากตัวอย่าง เป็นการจัดกลุ่มข้อมูลเกี่ยวกับสินค้า โดยใช้วิธี K-Means Clustering และแสดงผลลัพธ์ด้วย Scatter Plot และ Centroid ของแต่ละกลุ่ม ในการทำงาน โค้ดนี้ทำสิ่งต่อไปนี้:
- สร้าง dataset ของข้อมูลเกี่ยวกับสินค้า โดยประกอบด้วย 2 ตัวแปร ได้แก่ “product_names” ที่เก็บชื่อสินค้าแต่ละชนิดและ “product_features” ที่เก็บข้อมูลเกี่ยวกับสินค้า ซึ่งประกอบด้วย 2 แถว แทนราคาของสินค้าแต่ละชนิดและความนิยมของสินค้าแต่ละชนิด
- สุ่มตำแหน่งของข้อมูลและกำหนดจำนวนกลุ่ม (clusters) ที่ต้องการจัดกลุ่ม
- สร้าง KMeans object และ fit กับ dataset เพื่อจัดกลุ่มข้อมูลเกี่ยวกับสินค้าตามจำนวนกลุ่มที่กำหนด
- แสดง centroid ของแต่ละกลุ่ม
- แสดง label ของแต่ละ data point
- สร้าง scatter plot ของข้อมูล โดยให้แต่ละกลุ่มมีสีต่างกัน ซึ่งสีแต่ละกลุ่มจะตรงกับสีที่กำหนดไว้ในตัวแปร colors
- ปรับแต่งกราฟ โดยกำหนดชื่อกราฟและแกน x,y และแสดงคำอธิบายสำหรับแต่ละกลุ่มที่ปรากฏในกราฟ
สำหรับการจัดกลุ่มข้อมูล (clustering) โดยใช้วิธี K-means clustering algorithm ซึ่งเป็นหนึ่งในวิธีการจัดกลุ่มที่ได้รับความนิยมมากในการแก้ปัญหาทางด้านการเรียนรู้ของ Machine Learning โดยโค้ดจะทำการสร้างข้อมูลสินค้าที่มีชื่อและข้อมูลเกี่ยวกับสินค้า เช่น ราคาและความนิยม และทำการจัดกลุ่มสินค้าเหล่านี้ออกเป็นกลุ่มตามความคล้ายคลึงของข้อมูลระหว่างกัน จากนั้นทำการพล็อตกราฟ scatter plot เพื่อแสดงการจัดกลุ่มของสินค้า โดยให้แต่ละกลุ่มมีสีต่างกันเพื่อทำให้เห็นการจัดกลุ่มได้ชัดเจนขึ้น นอกจากนี้ยังมีการแสดง centroid ของแต่ละกลุ่มและ label ของแต่ละ data point อีกด้วย