一、划分聚类 1.K-means 经典算法,指定k为最后分裂保留的簇的个数。 ①n个样本,随机选择k个样本作为初始簇的中心。 ②计算每个样本距离k个簇中心的距离,把它加入到距离自己最近的簇中去。(如果相同,考虑优先级等合并规则) ③重新计算每个簇的平均值,更新为新的簇中心。 ④重复②③,直到簇稳定或者到达迭代上限次数。
优点: 可以处理规模较大的数据、时间复杂度低、空间复杂度低 缺点: k值需要人为指定,对初始k个点的选择很敏感。任意得到局部最优解而不是全局最优解(基于贪心)。 对噪声和孤立点非常敏感。 不能处理球形数据。
2.PAM(K-中心点算法) 将K-means中的按照簇的平均值作为中心点替换成了位于簇最中心位置的中心点作为中心点。 簇的中心点: 每个簇中到其他点平均距离最小的点 反复地用非代表对象来代替代表对象,试图找出更好的中心点,以改进聚类的质量. 首先,随机选择k个点作为中心点。 对于每个非中心点对象能否替代当前的中心点: ①先进行替换。对于所有非中心点,如果离替换后的中心点更近,则被划分到新中心点的簇中去;否则,划分到离自己最近的中心点的簇中去。 ②计算总代价。简单来说就是所有非中心点到簇中心的总距离变小,则同意替换。否则,进行回溯,即把替换的换回去。
优点: 比起K-means算法,对于小数据集更有效。 缺点: 对噪声和孤立点非常敏感。大数据集不太适用。
二、层次聚类 大体上分为合并法和分裂法两种。一个自底向上,一个自顶向下。 1.AGNES(自底向上) ①起初每个对象都属于一个簇 ②根据两个簇中最近的两个数据点找到最近的两个簇 ③合并两簇
优点: 可解释性好(如当需要创建一种分类法时);还有些研究表明这些算法能产生高质量的聚类,也会应用在上面说的先取K比较大的K-means后的合并阶段. 缺点: 时间复杂度高
2.DIANA(自顶向下) ①起初所有对象属于一个簇 ②求出具有最大直径的簇 ③在该簇中找到平均相异度最大的点放入分裂簇。把分裂前的簇中的,满足到分裂簇的最短距离 < 到分裂前簇的最短距离,的点加入分裂簇中。
优点: 可解释性好(如当需要创建一种分类法时);还有些研究表明这些算法能产生高质量的聚类,也会应用在上面说的先取K比较大的K-means后的合并阶段. 缺点: 时间复杂度高
三、密度聚类 基于密度划分聚类 1.DBSCAN算法 定义了密度可达、直接密度可达等概念。可以解决不规则形状的簇的划分。就是画个圈圈诅咒你。 遍历所有点: ①是核心点,找出所有密度可达的点,形成一个簇 ②不是核心点,continue
优点: 对噪声处理比较好。可以解决不规则形状的簇的划分。 缺点: DBSCAN用固定参数识别聚类,但当聚类的稀疏程度不同时,可能会破坏簇的自然结构.
四、其他聚类
1.BIRCH(基于CF Tree) 听着很复杂,有负载因子啥的。基于CF Tree和数据库,一次扫描即可进行聚类,时间复杂度O(n). 不适用于高维数据。
2.CURE(随机抽样) 时间复杂度O(n),可以适应非球形的几何形状. 不适用于高维数据。