บทนำเกี่ยวกับ Kmeans Clustering Algorithm

May 01 2023
การจัดกลุ่ม K-Mean คืออะไร? การจัดกลุ่ม K-Means เป็นอัลกอริทึมการเรียนรู้ของเครื่องที่ไม่มีการควบคุมซึ่งใช้สำหรับการจัดกลุ่มหรือจัดกลุ่มจุดข้อมูลที่คล้ายกันเข้าด้วยกันในชุดข้อมูล เป็นอัลกอริธึมการแบ่งพาร์ติชัน ซึ่งแบ่งข้อมูลออกเป็นกลุ่มที่ไม่ทับซ้อนกัน โดยที่จุดข้อมูลแต่ละจุดอยู่ในกลุ่มเดียว

การจัดกลุ่ม K-Mean คืออะไร?

การจัดกลุ่ม K-Means เป็นอัลกอริทึมการเรียนรู้ของเครื่องที่ไม่มีการควบคุมซึ่งใช้สำหรับการจัดกลุ่มหรือจัดกลุ่มจุดข้อมูลที่คล้ายกันเข้าด้วยกันในชุดข้อมูล เป็นอัลกอริธึมการแบ่งพาร์ติชัน ซึ่งแบ่งข้อมูลออกเป็นกลุ่มที่ไม่ทับซ้อนกัน โดยที่จุดข้อมูลแต่ละจุดอยู่ในกลุ่มเดียว การจัดกลุ่ม K-mean มีจุดมุ่งหมายเพื่อลดผลรวมของระยะทางกำลังสองระหว่างจุดข้อมูลแต่ละจุดกับเซนทรอยด์ที่กำหนด

ทฤษฎี - มันทำงานอย่างไร?

ขั้นตอนที่ 1 ขั้นแรก เราต้องตัดสินใจเลือกค่า K ซึ่งเป็นจำนวนคลัสเตอร์ที่เราต้องการสร้าง ค่าของ K สามารถตัดสินใจได้โดยการสุ่มหรือใช้วิธีบางอย่าง เช่น Elbow, Silhouette

ขั้นตอนที่ 2 ต่อไป เราจะสุ่มเลือกจุด K จากชุดข้อมูลเพื่อทำหน้าที่เป็นเซนทรอยด์เริ่มต้นสำหรับแต่ละคลัสเตอร์

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

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

ขั้นตอนที่ 5 เราทำซ้ำขั้นตอนที่ 3 และ 4 จนกว่าอัลกอริทึมจะมาบรรจบกัน ซึ่งหมายความว่าเซนทรอยด์ไม่เคลื่อนที่อีกต่อไปหรือการปรับปรุงผลรวมของระยะทางกำลังสองระหว่างจุดข้อมูลและเซนทรอยด์ที่กำหนดให้ไม่มีนัยสำคัญ

รหัสทำงานอย่างไร

นำเข้าไลบรารีที่จำเป็น:

import numpy as np
import matplotlib.pyplot as plt

X = np.random.rand(100, 2) * 2
plt.scatter(X[:, 0], X[:, 1])
plt.show()

      
                

K = 7
centroids = X[np.random.choice(len(X), K, replace=False)]
plt.scatter(X[:, 0], X[:, 1])
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()

      
                
while True: # Assign data points to the nearest centroid distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2)) labels = np.argmin(distances, axis=0) # Calculate new centroids new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(K)]) # Check for convergence if np.all(centroids == new_centroids): break # Update centroids centroids = new_centroids plt.scatter(X[:, 0], X[:, 1], c=labels) plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r') plt.show()

ข้อจำกัดของ K หมายถึงอัลกอริทึม

  1. K หมายถึงการจัดกลุ่มไวต่อการเลือกเซนทรอยด์เริ่มต้น อัลกอริทึมอาจบรรจบกับโซลูชันที่ไม่เหมาะสมหากไม่ได้เลือกเซนทรอยด์เริ่มต้นอย่างเหมาะสม
  2. K หมายถึงการจัดกลุ่มมีความไวต่อค่าผิดปกติ
  3. K หมายถึงการจัดกลุ่มมีความไวต่อค่าของ K หากเลือก K ไม่ถูกต้อง อาจทำให้เกิดกลุ่มที่ไม่เหมาะสม