未知簇数量的无监督聚类算法
未知簇数量的无监督聚类算法
技术背景
在机器学习领域,无监督聚类是一种重要的数据分析技术,它能够将数据集中相似的数据点划分为不同的簇。然而,在实际应用中,我们往往并不知道数据集中具体存在多少个簇。例如,给定一组三维向量,需要根据欧几里得距离将它们聚类,使得同一簇内任意两个向量之间的欧几里得距离小于某个阈值 T
,同时可能存在一些单独的向量,它们与其他向量的欧几里得距离都不小于 T
,不属于任何一个簇。
实现步骤
1. 层次聚类(Hierarchical Clustering)
层次聚类是一种较为基础的聚类方法,有很多现成的实现。以 Python 的 scipy
库为例,其实现步骤如下:
- 生成数据:创建包含多个簇和孤立点的数据集。
- 聚类操作:使用
scipy.cluster.hierarchy.fclusterdata
函数进行聚类,通过设置距离阈值thresh
来决定是否将点或簇合并。 - 可视化:使用
matplotlib
库绘制聚类结果。
2. DBSCAN 算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的空间聚类算法,它可以根据向量的局部密度进行聚类,自动确定簇的数量,并将密度不足的点视为噪声点(不属于任何簇)。实现步骤如下:
- 导入所需的库,如
sklearn.cluster.DBSCAN
。 - 调用
DBSCAN
函数进行聚类,设置参数eps
表示邻域半径,min_samples
表示最小样本数。
3. OPTICS 算法
OPTICS(Ordering Points To Identify the Clustering Structure)与 DBSCAN 密切相关,它适用于处理大型数据集,能够在可变的邻域半径下找到高密度的核心样本并扩展簇。实现步骤如下:
- 导入
sklearn.cluster.OPTICS
库。 - 调用
OPTICS
函数进行聚类,根据需求调整eps
和min_samples
参数。
核心代码
层次聚类示例代码
1 |
|
DBSCAN 示例代码
1 |
|
OPTICS 示例代码
1 |
|
最佳实践
- 层次聚类:在选择距离阈值时,可以通过计算不同阈值下聚类的质量指标(如 Calinski-Harabasz 指数)来确定最优阈值。该指数通过计算平均簇间距离与簇内距离的比值,值越大表示聚类效果越好。
- DBSCAN 和 OPTICS:需要根据数据集的特点合理选择
eps
和min_samples
参数。可以通过多次试验或使用网格搜索等方法来找到最优参数组合。
常见问题
- 如何选择合适的算法:层次聚类适用于小规模数据集,实现简单;DBSCAN 适用于具有任意形状簇的数据集,能够处理噪声点;OPTICS 则更适合大型数据集。
- 如何确定聚类的阈值或参数:可以使用质量指标(如 Calinski-Harabasz 指数)来评估不同阈值或参数下的聚类效果,选择最优值。
- 如何处理孤立点:DBSCAN 和 OPTICS 算法会自动将密度不足的点视为噪声点(孤立点);层次聚类在设置合适的阈值时也可以允许存在单个点的簇。
未知簇数量的无监督聚类算法
https://119291.xyz/posts/2025-04-21.unsupervised-clustering-with-unknown-number-of-clusters/