Đánh giá clustering - silhouette và diễn giải

Đo chất lượng gom cụm không nhãn: silhouette từng điểm và toàn cục, diễn giải kết quả, chọn k và bẫy diễn giải sai.
Trung bìnhThuật toán ~45 phút

Giới thiệu

Bài này học silhouette chấm điểm gom cụm không nhãn. Điểm này giúp chọn k và so thuật toán công bằng.

Kiến thức cần nhớ

Silhouette một điểm

  • a là khoảng cách trung bình tới bạn cùng cụm.
  • b là khoảng cách trung bình tới cụm hàng xóm gần nhất.
  • Điểm số = (b - a) / max(a, b), từ -1 tới 1.
  • Ví dụ đời thường: ở đúng nhà thì điểm cao, ở nhầm nhà thì điểm âm.

Đọc điểm toàn cục

  • Trung bình mọi điểm ra điểm toàn cục của phân hoạch.
  • Trên 0.7 là rõ đẹp, 0.5 tới 0.7 là hợp lý.
  • 0.25 tới 0.5 là yếu, dưới 0.25 là không cấu trúc.
  • Ví dụ đời thường: lớp nào cũng ngồi đúng chỗ thì điểm cao.

Chọn k và bẫy

  • Chạy k từ 2 tới 10, vẽ đường điểm, chọn đỉnh cao nhất.
  • Silhouette thiên vị cụm tròn nên chấm oan cụm vòng tròn.
  • Cụm đẹp về số mà vô nghĩa nghiệp vụ thì vẫn bỏ.
  • Ví dụ đời thường: chia theo mã bưu điện đẹp mà bán hàng không cần.
# Ý tưởng silhouette một điểm
def silhouette(a, b):
    # a: gắn kết trong nhà, b: tách biệt nhà bên
    return (b - a) / max(a, b)  # gần 1 là đúng nhà

Ví dụ

  • Input: 2 cụm tách rất xa -> Output: điểm toàn cục trên 0.9, không điểm âm.
  • Câu này cho thấy cụm rõ thì điểm gần tuyệt đối.
  • Input: gán nhãn ngẫu nhiên -> Output: điểm quanh 0.
  • Câu này cho thấy đoán bừa thì điểm lẹt đẹt.

💻 Bài tập

Ngôn ngữ: Python 3 với NumPy. Dùng K-means ngày 47 và DBSCAN ngày 48. Nộp vào day-049/.

Bài 1: Silhouette tự cài

HàmYêu cầu
silhouette_samples(X, labels)Trả mảng s(i). Điểm ở cụm 1 phần tử có s = 0. Bỏ qua điểm nhiễu -1
silhouette_score(X, labels)Trung bình s(i)

Công thức: a(i)a(i) là khoảng cách trung bình tới điểm cùng cụm, b(i)b(i) là trung bình nhỏ nhất tới các cụm khác, s(i)=b−amax⁡(a,b)s(i) = \frac{b - a}{\max(a, b)}.

2 cụm tách rất xa         -> score > 0.9, không điểm âm
Nhãn ngẫu nhiên           -> score quanh 0
Chỉ có 1 cụm              -> ValueError

Bài 2: Chọn k bằng silhouette

Dữ liệu 4 cụm Gauss. Chạy K-means với k = 2..10.

  1. Vẽ silhouette score theo k. Chọn k tốt nhất.
  2. Vẽ silhouette plot cho k = 3, 4, 5: mỗi cụm là một dải s(i) sắp giảm dần.
  3. Chỉ ra cụm có nhiều điểm âm ở k = 5 và giải thích.

Bài 3: Khi metric nói dối (nâng cao)

  1. Dữ liệu 2 vòng tròn đồng tâm. DBSCAN tách đúng 2 vòng. K-means cắt đôi. Tính silhouette cả hai. Giải thích vì sao silhouette chấm K-means cao hơn.
  2. Tự cài Davies-Bouldin index và so với silhouette trên cùng dữ liệu.
  3. Phân khúc khách hàng: dữ liệu (tuổi, chi tiêu/tháng, số lần mua). Chọn k, rồi viết mỗi cụm một câu mô tả nghiệp vụ. Nếu không đặt tên được, ghi rõ.

✅ Tiêu chí hoàn thành

  • Kết quả khớp sklearn.metrics.silhouette_score với sai số 1e-6.
  • Có hình silhouette theo k và silhouette plot.
  • Bài 3 có ví dụ metric chấm sai kèm giải thích.
  • Mỗi cụm khách hàng có mô tả nghiệp vụ.

❓ Câu hỏi ôn tập

  • a và b trong silhouette là gì?
  • Điểm gần 1, gần 0, âm nghĩa là gì?
  • Dùng silhouette chọn k thế nào?
  • Bẫy cụm đẹp mà vô nghĩa là sao?

🌕 Bạn đã hoàn thành ngày 49. Làm hết bài tập phía trên rồi sang ngày tiếp theo.

Bớt paste mù, hiểu sâu từng dòng mình viết.

180 Days Challenge. 180 ngày cai nghiện vibe code.