【原创】各种聚类算法对比
像上一篇文章 《聚类思想分析》 所述, 聚类算法无所谓好坏,重点在于合理使用各类算法达到最优效果。
--------------------------------------------------------------------------------------------------------
下面所述算法都是各类算法原型,不含变形。
1. 划分聚类 VS 模糊聚类
以Kmeans和FCM算法为例:
FCM是Kmeans的改进,由硬性隶属关系提升为软性隶属。
FCM的优势:
软性隶属后,由于每个值对各类中心点都有贡献,因此中心点的迭代更易达到全局最优。
依据:
Kmeans的优化目标: 中心迭代公式:
FCM的优化目标: 中心迭代公式:
FCM相对Kmeans的优点: 1) 中心迭代更合理。 2) 鲁棒离群点
FCM相对Kmeans的缺点: 计算复杂度更高
同样,FCM和Kmeans有同样的缺点。
2. 层次聚类 VS 密度聚类
以底上的层次聚类和DBSCAN算法为例:
DBSCAN的优势:
1. 速度快 kN vs log(N)*N^2
2. 基于事件密度更优于基于距离的自发现
DBSCAN的劣势:
参数难以控制,对聚类效果影响大。也可以说是参数敏感。
即:
因为DBSCAN使用簇的基于密度的定义,因此它是相对抗噪音的,并且能处理任意形状和大小的簇。但是如果簇的密度变化很大,例如ABCD四个簇,AB的密度大大大于CD,而且AB附近噪音的密度与簇CD的密度相当,这是当MinPs较大时,无法识别簇CD,簇CD和AB附近的噪音都被认为是噪音;当MinPs较小时,能识别簇CD,但AB跟其周围的噪音被识别为一个簇。
同样,两者最大的共同的缺点是:
3. 先验聚类 VS 自发聚类
这里的定义如下:
先验聚类的优点:
1) 精确度高 2)有明确优化目标
先验的缺点:
1) 速度慢 2)噪音敏感 3)难以确定K值
同样,自发聚类和先验聚类正好相异,这里不再赘述。
4. DBSCAN算法 VS 共享近邻SNN算法
对于DBSCAN上述的问题,SNN可以一定程度的缓解。
由于SNN没有采用一般的密度定义,而是通过与其它点的关系来描述自己,所以SNN一定程度解决了疏松密度难以调衡的问题。
但是SNN速度较慢,是 kN^2 的算法。同样,SNN也是参数敏感的。
最后,灵活运用各种聚类算法应对场景问题才是关键。
未经博主允许,不得转载任何文章。