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})