讲聚类算法,首先就理解几个聚类里面的专有词,让我们先回顾下这些关键词的定义.
一个簇是一组数据对象的集合,在同一个簇中的对象彼此类似,而不同的簇中的对象彼此相异。将一组热处理或者抽象对象分组为类似对象组成的多个簇的过程被称为聚类。
聚类分析有很广泛的应用,包括市场或客户模式识别,生物学研究,空间数据分析,web文档分类。
聚类算法有很多:具体可以分为划分、层次、基于密度、基于网格、及基于模型等。
划分的主要有k-means,k-medoids,CLARANS等为代表,
k均值对奇异点敏感,k-medoids对其改进,破除对奇异点的敏感,采用样本点来代表簇,但是大大增加了复杂度到了O(N^2).
CLARANS算法采用随机采样的方式,来选择到局部最优后,依然向其他点搜索,直到选出最优解,复杂度为O(N^2),
层次聚类:
BIRCH:想法非常好,通过遍历数据生成一颗树,通过结点的合并来减少树枝。但是其需要提供一个最大簇半径的阈值,这个条件似乎很难确定。
其复杂度为O(N),并只能生成球状簇。
CURE 算法:采用收缩因子,让簇中心在样本之间移动,到最后,离得近的簇合并,合并的簇不再限于球状,但需要用户提供收缩因子,似乎有点离谱了。
Chameleon: 如果两个对象 的近邻都差不多,那么这两个对象属于同一簇的可能性就大。可是计算比较复杂,可能到O(N^2),能发现任意开关的簇。
基于密度:
DBSCAN:定义一个领域&,如果p在q的领域内,pq就可达,可达的就在一簇内,这样把所有可达的合并就是一个簇,然后再在剩下的样本中,选择样本,将与其可达的连在一起就形成了另外的簇,可是这样的话如何确定这个&领域的值呢??太难控制了。
OPTICS: 认为如果对整个样本集,都用统一的&,似乎太过于苛刻了,因为不同的簇,可能密度不一样,密的自然领域就要小一点,希的就大一点,所以他提出两个距离来衡量,一个是核心距离,一个是可达距离,核心距离都一样,可达就不相同了。他自己说复杂度在空间索引采用时只有O(nlogN)
ENCLUE:这个更牛B,认为每个样本的影响符合某一数学函数,这个非常玄啊!他是否正确,谁又说得清呢
基于网格:
STING:把整个样本集放在一个网格里,然后处理,那么复杂度就与样本个数无关了,与采用的网格大小有关。比较靠谱
还有小波来聚类,神经网络来聚类,基于模型来聚类,各种聚类方法层出不穷啊。人的智慧是无止境!