K-Means聚类算法缺点及替代算法DBSCAN-HAC-GMM的使用

K-Means聚类算法缺点及替代算法DBSCAN-HAC-GMM的使用

1、简介

上一篇我们验证了KMeans算法的原理与使用,KMeans聚类算法虽然简单高效,但确实存在一些缺点:

  1. 需要预先指定簇的数量:KMeans算法在开始时就需要用户指定要形成的簇的数量(k值),这在实际应用中往往很难确定。
  2. 对初始中心点敏感:不同的初始中心点选择可能导致最终结果不同,容易陷入局部最优解。
  3. 处理噪声和异常数据不佳:KMeans假设所有簇的数据分布是球形的,并且簇大小相似,因此对于形状不规则或者含有大量噪声的数据集表现较差。
  4. 不能处理非凸型簇:由于其基于距离度量的方法,KMeans无法很好地识别出那些不是凸形的簇结构。

针对上述缺点,有一些替代或改进的聚类算法可以考虑使用:

DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

DBSCAN是一种基于密度的聚类算法,能够发现任意形状的簇,并且不需要事先指定簇的数量。它通过连接密集区域来形成簇,同时能够有效地识别噪声点。

from sklearn.cluster import DBSCAN
import numpy as np

# 假设我们有一个二维数据集
data = np.array([[1, 2], [2, 2], [2, 3],
                 [8, 7], [8, 8], [25, 80]])

dbscan = DBSCAN(eps=3, min_samples=2).fit(data)

print("Labels:", dbscan.labels_)

Hierarchical Agglomerative Clustering (层次聚类)

这是一种自底向上的聚类方法,从每个样本作为一个单独的簇开始,然后逐步合并最接近的簇,直到达到预定的簇数或某个停止条件为止。它可以生成一个树状图表示聚类过程。

from sklearn.cluster import AgglomerativeClustering
import numpy as np

# 同样的数据集
data = np.array([[1, 2], [2, 2], [2, 3],
                 [8, 7], [8, 8], [25, 80]])

agg_clustering = AgglomerativeClustering(n_clusters=2).fit(data)

print("Labels:", agg_clustering.labels_)

Gaussian Mixture Models (GMM)

GMM是一种概率模型,假设数据是由多个高斯分布混合而成的。与KMeans相比,GMM不仅分配类别标签,还提供了每个样本属于各个簇的概率,这对于不确定性的建模更为有效。

from sklearn.mixture import GaussianMixture
import numpy as np

# 同样的数据集
data = np.array([[1, 2], [2, 2], [2, 3],
                 [8, 7], [8, 8], [25, 80]])

gmm = GaussianMixture(n_components=2).fit(data)

labels = gmm.predict(data)
print("Labels:", labels)

这些算法各有优劣,在选择具体的聚类算法时,应根据具体的应用场景、数据特性和需求来进行决定。


K-Means聚类算法缺点及替代算法DBSCAN-HAC-GMM的使用
https://www.dearcloud.cn/2024/11/15/20241115-dbscan-hac-gmm/K-Means聚类算法缺点及替代算法DBSCAN-HAC-GMM的使用/
作者
宋兴柱
发布于
2024年11月15日
许可协议