聚类

聚类分析算法概述:

1.K-Means算法:

步骤:

  1. 首先我们选择一些类/组,并随机初始化他们各自的中心点.中心点是与每个数据点向量长度相同的位置.这需要我们提前预知类的数量(即中心点的数量)

  2. 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类

  3. 计算每一类的中心点作为新的中心点

  4. 重复以上步骤,知道每一类中心点在每次迭代后变化不大为止

这里写图片描述

优点:

速度快,计算简便

缺点:

我们必须知道数据有多少组/类

数据集一样 可能同一个k值,分类却是不一样的

2.均值漂移聚类:

​ 均值漂移聚类是基于滑动窗口的算法爱找到数据点密集区域.这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口的内点的均值来完成.来定位每个组/类的中心点.

具体步骤:

  1. 确定滑动窗口半径r,以随机选取的中心点C半径为r的圆形滑动窗口开始滑动。均值漂移类似一种爬山算法,在每一次迭代中向密度更高的区域移动,直到收敛。

  2. 每一次滑动到新的区域,计算滑动窗口内的均值来作为中心点,滑动窗口内的点的数量为窗口内的密度。在每一次移动中,窗口会想密度更高的区域移动。

  3. 移动窗口,计算窗口内的中心点以及窗口内的密度,知道没有方向在窗口内可以容纳更多的点,即一直移动到圆内密度不再增加为止。

  4. 步骤一到三会产生很多个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,然后根据数据点所在的滑动窗口进行聚类。

    这里写图片描述

优点:

不同于K-Means算法,均值漂移聚类算法不需要我们知道多少组/类

基于密度的算法相比于K-Means树军职影响小

缺点:

矿口半径的选择可能是不重要的

3.DBSCAN算法:

步骤:
  1. 标记所有对象是unvisited

  2. DO

  3. 随机选择一个unvisited对象p

  4. 标记p是visited

  5. if p的$epsilon-$邻域至少有minpoints个对象

  6. 创建一个新簇C,并把p添加到新簇C中

  7. 令N是p的$epsilon-$邻域中的对象集合

    遍历N这个集合中每一个点$p_i$:

    ​ if $p_i$是unvisited:

    ​ 标记p是visited

    ​ if p的$epsilon-$邻域至少有minPts个对象,把这些对象添加到N中

    ​ 如果p还不是任何簇的成员,把p添加到C中

    end for

  8. else p是噪声点

  9. Until 没有标记为unvisited 的对象

参数选择:
  1. 半径$epsilon:$可以根据K距离来设定:找突破点
  2. K距离:给定数据集$P={p(i);i=1,2,....,n}$,计算p(i)到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离
  3. MinPts:k-距离中k的值,一般取得很小,多洗尝试
优势:

不需要指定簇的个数

可以发现任意形状的簇

擅长找到离散点

两个参数就够了

劣势:

高纬度数据有些困难

参数难以选择

sklearn中效率很慢

4.凝聚层次聚类:

​ 层次聚类算法分为两类:自上而下,自下而上.凝聚层次聚类算法(HAC)是自下而上的一种聚类算法.HAC首先将每个数据点视为一个单一的簇,然后计算机所有簇之间的距离来合并簇,知道所有簇聚合成为一个簇为止.

步骤:
  1. 首先将每个数据点视为一个单一簇,测量两个簇之间距离的度量标准
  2. 在每次迭代中,将两个具有最小距离的簇合并成一个簇
  3. 重复所有数据点成一个簇
原文地址:https://www.cnblogs.com/Zhao159461/p/11635637.html