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) ของกลุ่มเป็นตัวแทนของกลุ่มนั้นๆ โดยมีขั้นตอนดังนี้

  1. กำหนดจำนวนกลุ่ม (K) ที่ต้องการจัดกลุ่มข้อมูล

  2. สุ่มเลือกจุดศูนย์กลางสำหรับแต่ละกลุ่มเริ่มต้น

  3. คำนวณหาความห่างระหว่างจุดข้อมูลกับจุดศูนย์กลางของแต่ละกลุ่ม และกำหนดให้จุดข้อมูลเข้ากลุ่มที่มีความห่างจากจุดศูนย์กลางน้อยที่สุด

  4. คำนวณหาจุดศูนย์กลางใหม่ของแต่ละกลุ่มโดยใช้ข้อมูลทั้งหมดในกลุ่มนั้นๆ

  5. ทำซ้ำขั้นตอนที่ 3-4 จนกว่าจุดศูนย์กลางจะไม่เปลี่ยนแปลงอีกต่อไป

  6. แบ่งข้อมูลเป็นกลุ่มตามจุดศูนย์กลางที่ได้

การใช้ 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

  1. Elbow Method: วิธีนี้ใช้หาจุดที่ชันลดลงของกราฟหลังจาก plot ค่า SSE (Sum of Squared Errors) โดย SSE คือผลรวมของระยะห่างระหว่างจุดใน cluster แต่ละกลุ่มโดยยกกำลังสอง จุดที่ชันลดลงเร็วที่สุดคือจุดที่เหมาะสมที่สุดสำหรับค่า K นั้น

  2. Silhouette Method: วิธีนี้ใช้วัดระยะห่างภายในและระยะห่างระหว่าง cluster แต่ละกลุ่ม ด้วยค่า silhouette coefficient ซึ่งเป็นค่าที่อยู่ระหว่าง -1 ถึง 1 โดยค่าที่ใกล้ 1 แสดงว่าความคล้ายคลึงระหว่างสมาชิกใน cluster เป็นอย่างมาก และค่าที่ใกล้ -1 แสดงว่าสมาชิกใน cluster มีความแตกต่างกันมาก สำหรับค่า K ที่เหมาะสมที่สุดคือค่า K ที่มีค่า silhouette coefficient มากที่สุด

ด้วยความซับซ้อนของกระบวนการการปรับค่า K และวิธีการทดสอบต่างๆ การใช้ K-means ต้องใช้ความรอบคอบและความระมัดระวังในการเลือกค่า K ที่เหมาะสมสำหรับชุดข้อมูลนั้นๆ

 

K-means เป็นเทคนิคการแบ่งกลุ่มที่นิยมใช้ในการวิเคราะห์ข้อมูล

มีการนำไปใช้งานในงานต่างๆ อย่างกว้างขวางในการประยุกต์ใช้ K-means ตัวอย่างเช่น

  1. การจัดกลุ่มลูกค้า
    K-means สามารถนำมาใช้จัดกลุ่มลูกค้าในธุรกิจต่างๆ เพื่อทำการตลาดและวิเคราะห์ตลาด เช่น ร้านค้าออนไลน์สามารถใช้ K-means เพื่อแบ่งกลุ่มลูกค้าที่มีความสนใจในสินค้าเดียวกันเพื่อจัดโปรโมชั่นหรือแนะนำสินค้าต่อไปได้

  2. การวิเคราะห์ข้อมูลโรค
    K-means สามารถนำมาใช้ในการวิเคราะห์ข้อมูลเกี่ยวกับโรค เช่น การแบ่งกลุ่มผู้ป่วยที่มีลักษณะการเป็นโรคเดียวกันเพื่อให้สามารถตรวจสอบอาการ และวิเคราะห์ผลของการรักษาได้

  3. การวิเคราะห์เว็บไซต์
    K-means สามารถนำมาใช้ในการวิเคราะห์เว็บไซต์เพื่อแบ่งกลุ่มข้อมูลต่างๆ เช่น การแบ่งกลุ่มบทความที่มีเนื้อหาเดียวกัน เพื่อให้สามารถจัดการและวิเคราะห์ข้อมูลบนเว็บไซต์ได้สะดวกขึ้น

  4. การวิเคราะห์ภาพถ่าย
    K-means สามารถนำมาใช้ในการวิเคราะห์ภาพถ่าย เช่น การแบ่งกลุ่มภาพถ่ายที่มีลักษณะเด่นเด่นเหมือนกัน เป็นต้น

  5. การจัดกลุ่มสินค้าในร้านค้าออนไลน์
    หากเรามีร้านค้าออนไลน์และมีสินค้ามากมาย เราอาจใช้ K-means เพื่อจัดกลุ่มสินค้าให้ง่ายต่อการจัดแสดงและช่วยให้ผู้ซื้อเลือกสินค้าได้ง่ายขึ้น

  6. การจัดกลุ่มผู้ใช้บริการ
    บริษัทที่ให้บริการออนไลน์อาจใช้ K-means เพื่อจัดกลุ่มลูกค้าที่มีความต้องการและพฤติกรรมการใช้บริการที่คล้ายกัน เพื่อให้สามารถจัดทีมงานและพัฒนาบริการให้เหมาะสมกับกลุ่มลูกค้าได้อย่างมีประสิทธิภาพ

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

  8. การจัดกลุ่มออกกำลังกาย
    หากเรามีแอปพลิเคชันสำหรับการออกกำลังกาย เราอาจใช้ 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) โดยมีขั้นตอนการทำงานดังนี้:

  1. สร้าง dataset ขึ้นมาโดยใช้ numpy โดยจำนวนข้อมูลคือ 200 และมี 2 features
  2. กำหนดจำนวนกลุ่ม (clusters) ที่ต้องการจัดกลุ่ม
  3. สร้าง KMeans object และ fit กับ dataset
  4. แสดง centroid ของแต่ละกลุ่ม
  5. แสดง label ของแต่ละ data point
  6. วาด 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 ของแต่ละกลุ่ม ในการทำงาน โค้ดนี้ทำสิ่งต่อไปนี้:

  1. สร้าง dataset ของข้อมูลเกี่ยวกับสินค้า โดยประกอบด้วย 2 ตัวแปร ได้แก่ “product_names” ที่เก็บชื่อสินค้าแต่ละชนิดและ “product_features” ที่เก็บข้อมูลเกี่ยวกับสินค้า ซึ่งประกอบด้วย 2 แถว แทนราคาของสินค้าแต่ละชนิดและความนิยมของสินค้าแต่ละชนิด
  2. สุ่มตำแหน่งของข้อมูลและกำหนดจำนวนกลุ่ม (clusters) ที่ต้องการจัดกลุ่ม
  3. สร้าง KMeans object และ fit กับ dataset เพื่อจัดกลุ่มข้อมูลเกี่ยวกับสินค้าตามจำนวนกลุ่มที่กำหนด
  4. แสดง centroid ของแต่ละกลุ่ม
  5. แสดง label ของแต่ละ data point
  6. สร้าง scatter plot ของข้อมูล โดยให้แต่ละกลุ่มมีสีต่างกัน ซึ่งสีแต่ละกลุ่มจะตรงกับสีที่กำหนดไว้ในตัวแปร colors
  7. ปรับแต่งกราฟ โดยกำหนดชื่อกราฟและแกน x,y และแสดงคำอธิบายสำหรับแต่ละกลุ่มที่ปรากฏในกราฟ

สำหรับการจัดกลุ่มข้อมูล (clustering) โดยใช้วิธี K-means clustering algorithm ซึ่งเป็นหนึ่งในวิธีการจัดกลุ่มที่ได้รับความนิยมมากในการแก้ปัญหาทางด้านการเรียนรู้ของ Machine Learning โดยโค้ดจะทำการสร้างข้อมูลสินค้าที่มีชื่อและข้อมูลเกี่ยวกับสินค้า เช่น ราคาและความนิยม และทำการจัดกลุ่มสินค้าเหล่านี้ออกเป็นกลุ่มตามความคล้ายคลึงของข้อมูลระหว่างกัน จากนั้นทำการพล็อตกราฟ scatter plot เพื่อแสดงการจัดกลุ่มของสินค้า โดยให้แต่ละกลุ่มมีสีต่างกันเพื่อทำให้เห็นการจัดกลุ่มได้ชัดเจนขึ้น นอกจากนี้ยังมีการแสดง centroid ของแต่ละกลุ่มและ label ของแต่ละ data point อีกด้วย