Skip to content

VI.5d Những lưu ý khi sử dụng K-Means

K-Means là một thuật toán phân cụm phổ biến, nhưng để áp dụng hiệu quả cần chú ý một số điểm quan trọng:


🔎 Các lưu ý chính

  1. Chọn số cụm (k):
    • K-Means yêu cầu xác định trước số cụm.
    • Nếu chọn sai (k), kết quả phân cụm sẽ không phản ánh đúng cấu trúc dữ liệu.
    • Thường dùng các phương pháp như Elbow Method, Silhouette Score để chọn (k).
  2. Nhạy cảm với điểm khởi tạo (initialization):
    • Kết quả có thể khác nhau nếu chọn tâm cụm ban đầu khác nhau.
    • Giải pháp: dùng K-Means++ để chọn tâm cụm khởi tạo thông minh hơn.
  3. Nhạy cảm với outlier:
    • Outlier có thể kéo tâm cụm lệch xa, làm giảm chất lượng phân cụm.
    • Nên loại bỏ hoặc xử lý outlier trước khi chạy K-Means.
  4. Giả định cụm có dạng cầu (spherical clusters):
    • K-Means hoạt động tốt khi cụm có dạng tròn và kích thước tương tự.
    • Nếu cụm có hình dạng phức tạp (ví dụ: hình chữ U, xoắn ốc), K-Means sẽ không phân cụm chính xác.
  5. Yêu cầu chuẩn hóa dữ liệu:
    • Nếu các đặc trưng có thang đo khác nhau (ví dụ: chiều cao tính bằng cm, cân nặng tính bằng kg), cần chuẩn hóa (standardization) để tránh đặc trưng lớn chi phối khoảng cách.
  6. Không đảm bảo tối ưu toàn cục:
    • K-Means chỉ tìm nghiệm tối ưu cục bộ.
    • Nên chạy nhiều lần với khởi tạo khác nhau để chọn kết quả tốt nhất.
  7. Kích thước dữ liệu lớn:
    • Với dữ liệu rất lớn, K-Means có thể tốn thời gian.
    • Có thể dùng Mini-Batch K-Means để tăng tốc.

🌍 Tóm lại

K-Means dễ dùng và hiệu quả, nhưng cần:

  • Chọn số cụm hợp lý,
  • Chuẩn hóa dữ liệu,
  • Xử lý outlier,
  • Và kiểm tra nhiều lần để tránh tối ưu cục bộ.

Đây là biểu đồ Elbow Method minh họa cách chọn số cụm (k) trong K-Means. Điểm “khuỷu tay” (elbow) trên đường cong cho thấy giá trị (k) hợp lý nhất – thường là nơi inertia giảm mạnh rồi bắt đầu chậm lại.

👉 Trong ví dụ này, bạn sẽ thấy đường cong giảm nhanh từ (k=1) đến (k=3), sau đó chậm lại. Điều đó gợi ý rằng (k=3) là số cụm tối ưu cho dữ liệu giả lập. Đây chính là cách thực tế để chọn số cụm khi dùng K-Means.


Dưới đây là code Python minh họa cách dùng Elbow Method để chọn số cụm (k) trong K-Means. Bạn có thể chạy trực tiếp với scikit-learn và matplotlib:


📌 Các bước

  • make_blobs: tạo dữ liệu giả lập với 3 cụm.
  • inertia: đo độ chặt của cụm (càng nhỏ càng tốt).
  • Elbow Method: chọn (k) tại điểm “khuỷu tay” – nơi inertia giảm mạnh rồi bắt đầu chậm lại.

👉 Khi chạy code này, bạn sẽ thấy đường cong giảm nhanh từ (k=1) đến (k=3), sau đó chậm lại → gợi ý rằng (k=3) là số cụm hợp lý.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 1. Tạo dữ liệu giả lập gồm 3 cụm
X, y = make_blobs(n_samples=500, centers=3, cluster_std=0.6, random_state=42)

# 2. Tính inertia (tổng bình phương khoảng cách) cho k từ 1 đến 10
inertias = []
K_range = range(1, 11)

for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(X)
    inertias.append(kmeans.inertia_)

# 3. Vẽ biểu đồ Elbow
plt.figure(figsize=(8, 6))
plt.plot(K_range, inertias, 'bo-')
plt.xlabel("Số cụm k")
plt.ylabel("Inertia (Tổng bình phương khoảng cách)")
plt.title("Elbow Method để chọn số cụm K")
plt.xticks(K_range)
plt.grid(True)
plt.show()

Chạy trên Colab


Discover more from Cùng Học Cùng Mơ

Subscribe to get the latest posts sent to your email.

Leave a Reply

error: Content is protected !!