Tổng Quan 12 Thuật Toán Phân Cụm Trong Học Máy

Phân Loại Thuật Toán Phân Cụm

Các thuật toán phân cụm được chia thành 4 nhóm chính:

  • Mô hình liên kết: Dựa trên khoảng cách giữa các điểm dữ liệu (ví dụ: phân cụm phân cấp)
  • Mô hình trọng tâm: Sử dụng khoảng cách đến trọng tâm cụm (ví dụ: K-Means)
  • Mô hình phân phối: Dựa trên xác suất phân phối dữ liệu (ví dụ: Gaussian Mixture)
  • Mô hình mật độ: Phát hiện vùng có mật độ điểm cao (ví dụ: DBSCAN)

Cài Đặt Thực Tế Với Python

Sử dụng thư viện scikit-learn và hdbscan để triển khai các thuật toán:

1. K-Means


from sklearn.cluster import KMeans

# Khởi tạo mô hình
kmeans = KMeans(n_clusters=6)
# Huấn luyện và dự đoán
kmeans.fit(data)
cluster_labels = kmeans.predict(data)
# Trực quan hóa kết quả
plot_clusters(data, cluster_labels)

2. Mini-Batch K-Means


from sklearn.cluster import MiniBatchKMeans

mbk = MiniBatchKMeans(n_clusters=6, batch_size=100)
mbk.fit(data)
plot_clusters(data, mbk.labels_)

3. Affinity Propagation


from sklearn.cluster import AffinityPropagation

ap = AffinityPropagation(damping=0.95)
ap.fit(data)
plot_clusters(data, ap.labels_)

4. Mean Shift


from sklearn.cluster import MeanShift

ms = MeanShift(bandwidth=0.175, cluster_all=False)
ms.fit(data)
plot_clusters(data, ms.labels_)

5. Spectral Clustering


from sklearn.cluster import SpectralClustering

sc = SpectralClustering(n_clusters=6, affinity='nearest_neighbors')
sc.fit(data)
plot_clusters(data, sc.labels_)

6. Agglomerative Clustering


from sklearn.cluster import AgglomerativeClustering

ac = AgglomerativeClustering(n_clusters=6, linkage='ward')
ac.fit(data)
plot_clusters(data, ac.labels_)

7. DBSCAN


from sklearn.cluster import DBSCAN

dbscan = DBSCAN(eps=0.025)
dbscan.fit(data)
plot_clusters(data, dbscan.labels_)

8. BIRCH


from sklearn.cluster import Birch

birch = Birch(threshold=0.01, n_clusters=6)
birch.fit(data)
plot_clusters(data, birch.labels_)

9. OPTICS


from sklearn.cluster import OPTICS

optics = OPTICS(min_samples=15)
optics.fit(data)
plot_clusters(data, optics.labels_)

10. Gaussian Mixture


from sklearn.mixture import GaussianMixture

gmm = GaussianMixture(n_components=6)
gmm.fit(data)
plot_clusters(data, gmm.predict(data))

11. HDBSCAN


import hdbscan

hdbscan_model = hdbscan.HDBSCAN(min_cluster_size=15)
hdbscan_model.fit(data)
plot_clusters(data, hdbscan_model.labels_)

So Sánh Hiệu Suất

Hàm tiện ích đo thời gian thực thi:


def benchmark_clustering(data, algorithm, params):
start = time.time()
labels = algorithm(**params).fit_predict(data)
end = time.time()
print(f"{algorithm.__name__}: {end - start:.2f}s")

Ví dụ chạy benchmark:


benchmark_clustering(data, KMeans, {'n_clusters':6})
benchmark_clustering(data, DBSCAN, {'eps':0.025})

Thẻ: KMeans DBSCAN HDBSCAN GaussianMixture SpectralClustering

Đăng vào ngày 5 tháng 7 lúc 09:21