首先是k均值算法开始,这种只能处理数值属性,其他还有k中位数和k众数算法,它的可伸缩性较好为nkt。
然后为了应对k均值算法对离群点敏感问题,推出k中心算法,典型的有PAM算法,它是通过用实际对象充当代表对象,但是这样它的可伸缩性较差,需要k(n-k)。
这时推出了CLARA算法,是基于数据集的抽样,这样的抽样近似于总体的分布,增强了可伸缩性。
然后又推出了CLARANA算法,这种只比PAM算法多出了一个设置总阈值次数l,也就是说只输出局部最优,但是这个次数l很难确定。
尽管划分方法简单,但是划分方法存在很多问题,除了k均值算法的可伸缩性较好,其他聚类要求的方面几乎一无是处,其实其他算法是针对基于划分算法的这些缺点展开的。
尽管基于划分的方法满足互斥的簇的要求,但是聚类都是在一层进行,然后就有了层次聚类。
首先最简单的是凝聚层次聚类和分裂层次聚类,分别代表自底向上和自顶向下。
但是这两种缺点就是他们的可伸缩性较差间接导致不能撤销之前的操作,就推出了BRICH算法,这个算法可以在微簇上进行宏聚类,然后重建树不需要重新扫描数据库,且可以结合例如典型的基于划分的算法,所以可以处理噪音,且关于n是线性可伸缩的。
但是因为它的簇边界是基于半径或直径,所以只能发现球状的簇,然后又推出了变色龙算法,它考虑簇的连接情况和领近性,所以可以发现高质量的任意形状的簇,但是带来的代价就是可伸缩性降低了一点点,变成了n方。
由于层次聚类和基于划分的聚类都是通过距离度量的,选取一个较好的度量也不容易,而且对于有缺失值的数据聚类效果不好,且他们大部分使用的是启发
各种聚类算法的比较
最新推荐文章于 2023-12-26 09:26:23 发布