K-Means聚类算法缺点及替代算法DBSCAN-HAC-GMM的使用
K-Means聚类算法缺点及替代算法DBSCAN-HAC-GMM的使用
1、简介
上一篇我们验证了KMeans算法的原理与使用,KMeans聚类算法虽然简单高效,但确实存在一些缺点:
- 需要预先指定簇的数量:KMeans算法在开始时就需要用户指定要形成的簇的数量(k值),这在实际应用中往往很难确定。
- 对初始中心点敏感:不同的初始中心点选择可能导致最终结果不同,容易陷入局部最优解。
- 处理噪声和异常数据不佳:KMeans假设所有簇的数据分布是球形的,并且簇大小相似,因此对于形状不规则或者含有大量噪声的数据集表现较差。
- 不能处理非凸型簇:由于其基于距离度量的方法,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的使用/