Back to Home

Thuật toán K-Means demo

Trong thế giới của khoa học dữ liệu và học máy, việc tìm kiếm các mẫu và cấu trúc ẩn trong dữ liệu là một nhiệm vụ quan trọng. Thuật toán K-means là một trong những phương pháp phân cụm phổ biến nhất, giúp chúng ta nhóm các điểm dữ liệu tương tự lại với nhau một cách tự động.

K-means là một thuật toán học máy không giám sát (unsupervised learning), có nghĩa là nó hoạt động trên dữ liệu không có nhãn. Mục tiêu của thuật toán là phân chia tập dữ liệu thành kk cụm khác nhau, trong đó kk là một số được xác định trước. Các điểm dữ liệu trong cùng một cụm có xu hướng tương đồng với nhau hơn so với các điểm dữ liệu ở các cụm khác.

Thuật toán

Giả định rằng bộ dữ liệu là một tập hợp nn vector piRmp_i \in \mathbb R^m: S={P1(x11,x12,,x1m),P2(x21,x22,,x2m),,Pn(xn1,xn2,,xnm)}S=\{P_1(x_{11}, x_{12},\dots,x_{1m}), P_2(x_{21}, x_{22},\dots,x_{2m}),\dots, P_n(x_{n1}, x_{n2},\dots,x_{nm})\}

Thuật toán được mô tả như sau:

  • Khởi tạo: Chọn ngẫu nhiên kk điểm trong không gian dữ liệu làm tâm (centroid) của kk cụm ban đầu. Ta ký hiệu các cụm lần lượt là C1,C2,,Ck\mathcal C_1, \mathcal C_2, \dots, \mathcal C_k với các centroid tương ứng C1,C2,,CkC_1, C_2, \dots, C_k.

  • Gán nhãn: Tính toán khoảng cách từ mỗi điểm dữ liệu PSP \in S đến từng tâm cụm CiC_i:

    • Khoảng cách Euclide từ điểm P(p1,p2,,pm)P(p_1,p_2,\dots, p_m) đến điểm Q(q1,q2,,qm)Q(q_1,q_2,\dots,q_m) được cho bởi công thức d(P,Q)=j=1m(pjqj)2d(P, Q) = \sqrt{\sum_{j=1}^m (p_j - q_j)^2}

    • Một điểm PP sẽ được gán vào cụm CiC_i nếu khoảng cách d(P,Ci)d(P, C_i) là nhỏ nhất (i=1,2,,k)(i = 1,2,\dots,k)

  • Cập nhật tâm: Tính toán lại tâm của mỗi cụm bằng cách lấy trung bình của tất cả các điểm dữ liệu P(p1,p2,,pm)P(p_1,p_2,\dots,p_m) thuộc cụm đó. Ci=(PCip1Ci,PCip2Ci,,PCipmCi)\displaystyle C_i = \left(\frac {\sum_{P \in \mathcal C_i} p_1} {|\mathcal C_i|}, \frac {\sum_{P \in \mathcal C_i} p_2} {|\mathcal C_i|}, \dots, \frac {\sum_{P \in \mathcal C_i} p_m} {|\mathcal C_i|} \right), với Ci|\mathcal C_i| là số lượng các điểm trong cụm Ci\mathcal C_i.

  • Lặp lại: Lặp lại bước 2 và 3 cho đến khi các tâm cụm không thay đổi đáng kể hoặc đạt đến số lần lặp tối đa.

Chọn bao nhiêu cụm thì tốt?

Việc chọn kk không thể dựa trên cảm tính. Chúng ta cần các thước đo định lượng để đánh giá hiệu quả của việc phân cụm.

  1. Phương pháp Khuỷu tay (Elbow Method) và WCSS

Phương pháp này dựa trên việc cực tiểu hóa tổng bình phương khoảng cách nội cụm (Within-Cluster Sum of Squares - WCSS).

Công thức tính WCSS:

WCSS=i=1kxCixμi2WCSS = \sum_{i=1}^{k} \sum_{x \in \mathcal C_i} ||x - \mu_i||^2

Trong đó:

  • kk: Số lượng cụm.

  • Ci\mathcal C_i: Tập hợp các điểm dữ liệu thuộc cụm thứ ii.

  • μi\mu_i: Tâm cụm (centroid) của cụm ii.

  • xμi2||x - \mu_i||^2: Bình phương khoảng cách Euclidean từ điểm xx đến tâm cụm.

Khi kk tăng, WCSS chắc chắn giảm. Ta chọn kk tại vị trí mà tốc độ giảm của WCSS bắt đầu chậm lại rõ rệt (tạo thành một góc nhọn như cái khuỷu tay trên đồ thị). Lý do là vì tại đó, việc thêm cụm mới không còn giúp giải thích thêm nhiều biến động của dữ liệu nữa

  1. Chỉ số Silhouette (Silhouette Coefficient)

Chỉ số này đánh giá xem một điểm dữ liệu "thuộc về" cụm của nó tốt đến mức nào so với các cụm khác.

Công thức: Cho một điểm dữ liệu ii:

s(i)=b(i)a(i)max(a(i),b(i))s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))}

Trong đó:

  • nn là tổng số điểm dữ liệu trong toàn bộ tập dữ liệu

  • a(i)a(i): Khoảng cách trung bình từ điểm ii đến tất cả các điểm khác trong cùng một cụm (độ gắn kết nội bộ).

  • b(i)b(i): Khoảng cách trung bình từ điểm ii đến tất cả các điểm trong cụm gần nhất mà ii không thuộc về (độ tách biệt).

Giá trị hệ số Silhouette trung bình (SS):

S=1ni=1ns(i)S = \frac{1}{n} \sum_{i=1}^{n} s(i)
  • s(i)1s(i) \approx 1: Điểm được phân cụm rất tốt.

  • s(i)0s(i) \approx 0: Điểm nằm ở ranh giới giữa 2 cụm.

  • s(i)1s(i) \approx -1: Điểm bị gán sai cụm.

Ta sẽ chọn kk có giá trị SS trung bình lớn nhất.

  1. Phương pháp Thống kê Gap (Gap Statistic)

Phương pháp này so sánh logarit của WCSS từ dữ liệu thực với giá trị kỳ vọng của WCSS từ một tập dữ liệu tham chiếu (thường là phân bố đều, không có cấu trúc cụm).

Công thức tính Gap:

Gapn(k)=En{log(Wk)}log(Wk)Gap_n(k) = E_n^*\{\log(W_k)\} - \log(W_k)

Trong đó:

  • WkW_k: Là giá trị WCSS của dữ liệu thực với kk cụm.

  • En{log(Wk)}E_n^*\{\log(W_k)\} tiêu biểu cho giá trị trung bình của log(Wk)\log(W_k) thu được từ các mẫu dữ liệu phân bố ngẫu nhiên (Bootstrapping).

Cách xác định: Giá trị kk tối ưu là giá trị kk nhỏ nhất sao cho Gap(k)Gap(k) lớn hơn hoặc bằng giá trị của Gap(k+1)Gap(k+1) sau khi đã trừ đi một sai số tiêu chuẩn sk+1s_{k+1}:

Gap(K)Gap(K+1)sK+1Gap(K) \geq Gap(K+1) - s_{K+1}

Phương pháp này giúp loại bỏ tính chủ quan của phương pháp Elbow bằng cách cung cấp một tiêu chuẩn toán học cụ thể để dừng lại.

Demo

Ứng dụng

Thuật toán K-means có nhiều ứng dụng trong thực tế, bao gồm:

  • Phân khúc khách hàng: Phân chia khách hàng thành các nhóm khác nhau dựa trên hành vi mua sắm, nhân khẩu học, v.v., để giúp doanh nghiệp đưa ra chiến lược tiếp thị phù hợp.

  • Phân loại tài liệu: Nhóm các tài liệu tương tự nhau lại để giúp tổ chức và tìm kiếm thông tin dễ dàng hơn.

  • Nén ảnh: Giảm số lượng màu sắc trong một bức ảnh bằng cách nhóm các pixel có màu tương tự lại với nhau.

  • Phát hiện bất thường: Xác định các điểm dữ liệu khác biệt so với phần còn lại của tập dữ liệu, có thể là dấu hiệu của sự bất thường hoặc gian lận.

Comments

0/300

Leave name/email blank to comment anonymously

No comments yet. Be the first to comment!