聚类算法

聚类算法和禁忌算法 数据分析 聚类算法的实例_算法


聚类算法,就是在一系列的已知样本点中,通过限制条件和要求,从一个随机的起始点开始不断在周围寻找合适的点当作同一个类。下面我先举一个列子方便大家理解

聚类算法和禁忌算法 数据分析 聚类算法的实例_算法_02


首先有四个样本点从左到右记作A,B,C,D。我们先随机取(1,1)(2,1)为两个分类中心点,两类分别为group1和group2。那么现在分为两类了。

分别计算四个点到分类中心点的距离:

聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类算法和禁忌算法 数据分析_03

对比到两个中心点的距离可知:A距离group1近,B距离group2近,C距离group2近,D距离group2近.经过第一次计算之后我们得到:

聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类_04


因为A独自为group1,所以中心点不变。

对于group2有B,C,D所以重新计算中心点,计算方法就是计算各坐标平均值。

聚类算法和禁忌算法 数据分析 聚类算法的实例_机器学习_05


此时变为:

聚类算法和禁忌算法 数据分析 聚类算法的实例_机器学习_06


之后在经过上面同样的计算:

聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类_07


聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类算法和禁忌算法 数据分析_08


得到:

聚类算法和禁忌算法 数据分析 聚类算法的实例_邻域_09


聚类不发生变化,算法迭代停止。最后得到的就是上面的图像。上面我们了解了聚类是怎么样实现的,下面就学习关于聚类的算法:

K-means算法

对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

如果用数据表达式表示,假设簇划分为(C1,C2,…Ck),则我们的目标是最小化平方误差E: E=∑i=1k∑x∈Ci||x−μi||22

其中μi是簇Ci的均值向量,有时也称为质心,表达式为: μi=1|Ci|∑x∈Cix

这里的代码部分我们使用sklearn实现。

K-means算法分析:

  1. 对k个初始质心的选择比较敏感,容易陷入局部最小值。例如,我们上面的算法运行的时候,有可能会得到不同的结果,如下面这两种情况。K-means也是收敛了,只是收敛到了局部最小值
  2. 聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类_10

  3. k值的选择是用户指定的,不同的k得到的结果会有挺大的不同,如下图所示,左边是k=3的结果,蓝色的簇太稀疏了,蓝色的簇应该可以再划分成两个簇。右边是k=5的结果,红色和蓝色的簇应该合并为一个簇。
  4. 聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类算法和禁忌算法 数据分析_11

  5. 存在局限性,如下面这种非球状的数据分布就搞不定了:
  6. 聚类算法和禁忌算法 数据分析 聚类算法的实例_邻域_12

  7. 数据比较大的时候,收敛会比较慢。

对于K-means算法优化:

  1. 使用多次的随机初始化,计算每一次建模得到的代价函数的值,选取代价函数最小结果作为聚类结果。
  2. 聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类_13

  3. 使用肘部法则来选择k的值:
  4. 聚类算法和禁忌算法 数据分析 聚类算法的实例_邻域_14

这些优化在sklearn中都已经封装好了。
https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/大家可以在这个网站看到聚类一步一步的过程,非常直观。

DBSCAN算法

DBSCAN是基于密度进行聚类的,本算法将具有足够高密度的区域划分为簇,并可以发现任何形状的聚类,用于解决K-means对于一些图案无法分类的情况。

核心对象:如果给定 𝜀 邻域内的样本点数大于等于Minpoints,则该对象为核心对象。
直接密度可达:给定一个对象集合D,如果p在q的𝜀邻域内,且q是一个核心对象,则我们说对象p从q触发是直接密度可达的(directly density-reachable)。
密度可达:集合D,存在一个对象链p1,p2…pn,p1=q,pn=p,pi+1是从pi关于𝜀和Minpoints直接密度可达,则称点p是从q关于𝜀和Minpoints密度可达的。
密度相连:集合D存在点o,使得点p、q是从o关于𝜀和Minpoints密度可达的,那么点p、q是关于𝜀和Minpoints密度相连的

针对笑脸分类,我们看K-means算法对于笑脸的分类:

聚类算法和禁忌算法 数据分析 聚类算法的实例_邻域_15


而对于DBSCAN算法:

聚类算法和禁忌算法 数据分析 聚类算法的实例_聚类算法和禁忌算法 数据分析_16

DBSCAN思想

1.指定合适的𝜀和Minpoints。
2.计算所有的样本点,如果点p的𝜀邻域里有超过Minpoints个点,则创建一个以p为核心点的新族。
3.反复寻找这些核心点直接密度可达(之后可能是密度可达)的点,将其加入到相应的簇,对于核心点发生“密度相连”状况的簇,给予合并。
4.当没有新的点可以被添加到任何簇时,算法结束。1.指定合适的𝜀和Minpoints。

缺点:
• 当数据量增大时,要求较大的内存支持I/O消耗也很大。
• 当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差。

但是对于其最大的优点就是可以去除一些噪声点,不需要定义聚类个数,聚类簇的形状没有要求。