常见聚类算法

1.k-means(K均值)聚类

K-Means算法是无监督的聚类算法,简单,聚类效果也不错,被广泛应用。

K-Means算法有大量扩展算法,例如K-Means++,Mini Batch K-Means等。我们先以最基础的K-Means讲起。

K-Means

算法思想:

K-Means简单,对于给定的样本集,首先按照样本之间的距离大小,将样本集划分为K个簇类(簇划分原则:让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大,但是预先设定K,也就是预先知道簇的数量)。

具体算法步骤为:

1)输入:样本数据集

2)随机初始化K个簇的中心点(k已知)。

3)遍历数据集中每个点到中心点的距离(k个中心点),比较距离,将数据按照距离远近划分到簇。

4)重新计算簇内中心点,按照簇的平均值确定中心点

5 )重复3-4步奏,直到簇的中心点变化不大位置。也可以多次随机初始化中心点,选择运行的结果好的一个

算法优点:
1)速度快,方法简单明了
算法缺点:

1)对于不是凸的数据集比较难收敛 

2)须提前知道数据的簇数,也就是K。

3)若各个簇数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。

4)最终结果和初始点的选择有关,容易陷入局部最优。

5)对噪音和异常点比较的敏感。

初始化优化K-Means++

随机初始化K个簇的中心点对聚类结果和运行时间都有很大的影响,因此k个质心选择要和小心。完全随机的选择,可能会导致算法收敛慢。K-Means++就是优化K-Means的初始化。

优化策略, 如下:

1)从数据集合中随机选择一个作为第一个聚类中心a1

2)对于数据集中的每一个点,计算它与已选择的聚类中心距离

3)将距离其他中心点距离之和较大的点选取作为新的聚类中心的

4)重复2和3直到选择出k个聚类质心

5)利用这k个质心来作为初始化质心去运行标准的K-Means算法

距离优化 elkan K-Means

传统的K-Means算法,在每轮迭代时,计算所有的样本点到所有的中心的距离,比较的耗时。elkan K-Means算法就是从此进行优化。目标是减少不必要的距离的计算。

主要是思想是:两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算。

执行起来主要有:

1)对于一个样本点和两个中心点。预先得知两个中心点的距离D(z1,z2),通过计算得知2D(x,z1)≤D(z1,z2), 可推得D(x,z1)≤D(x,z2)。此时不需要再计算D(x,z2),减少计算量。(z1,z2为中心点,x为样本点,D为计算距离)

2)律是对于一个样本点x和两个质心z1,z2。我们可以得到D(x,j2)≥max{0,D(x,j1)−D(j1,j2)}。

优缺点:

利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是样本的特征是稀疏的,有缺失值的话,这个方法就不使用了,此时某些距离无法计算,则不能使用该算法。

大样本优化Mini Batch K-Means

在统的K-Means算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,特征也大,此时用传统的K-Means算法非常的耗时,就算加上elkan K-Means优化也依旧。此时Mini Batch K-Means应运而生。

主要思想:

用样本集中的一部分的样本来做传统的K-Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。

在Mini Batch K-Means中,选择一个合适的批样本大小batch size,用batch size个样本来做K-Means聚类。一般是通过无放回的随机采样得到batch size。为增加算法的准确性,我们一般会重复几次Mini Batch K-Means算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

执行起来主要有:

1)从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心。

2)中心更新,与K均值算法相比,数据的更新是在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新中心,并把小批量里的数据分配给该中心,随着迭代次数的增加,这些中心的变化是逐渐减小的,直到中心稳定或者达到指定的迭代次数,停止计算。

Mini Batch K-Means比K-Means有更快的收敛速度,但同时也降低了聚类的效果,但是在实际项目中却表现得不明显。个Mini Batch K-Means通过小样本的实验,可以初步预测聚类中心的位置,对n次Mini Batch K-Means的聚类结果取均值作为大样本实验初始聚类中心的位置,也能够减少运算量,加快聚类速度。

2均值漂移聚类

均值漂移聚类是基于滑动窗口的算法,寻找数据点的密集区域。这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个簇的中心点。然后对这些候选窗口进行相似窗口进行去除,最终形成中心点集及相应的分组。

具体步骤:
1. 确定滑动窗口半径r,以随机选取的中心点C半径为r的圆形滑动窗口开始滑动。均值漂移类似一种爬山算法,在每一次迭代中向密度更高的区域移动,直到收敛。
2. 每一次滑动到新的区域,计算滑动窗口内的均值来作为中心点,滑动窗口内的点的数量为窗口内的密度。在每一次移动中,窗口会想密度更高的区域移动。
3. 移动窗口,计算窗口内的中心点以及窗口内的密度,知道没有方向在窗口内可以容纳更多的点,即一直移动到圆内密度不再增加为止。
4. 步骤一到三会产生很多个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,然后根据数据点所在的滑动窗口进行聚类。

优点:不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。基于密度的算法相比于K-Means受均值影响较小。


缺点:窗口半径r的选择

3基于密度的聚类方法(DBSCAN)

与均值漂移聚类类似,DBSCAN也是基于密度的聚类算法。
具体步骤:
1. 首先确定半径r和minPoints. 从一个没有被访问过的任意数据点开始,以这个点为中心,r为半径的圆内包含的点的数量是否大于或等于minPoints,如果大于或等于minPoints则改点被标记为central point,反之则会被标记为noise point。
2. 重复1的步骤,如果一个noise point存在于某个central point为半径的圆内,则这个点被标记为边缘点,反之仍为noise point。重复步骤1,知道所有的点都被访问过。
优点:不需要知道簇的数量
缺点:需要确定距离r和minPoints

4高斯混合模型(GMM)的最大期望(EM)聚类

使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。因此,每个高斯分布被分配给单个簇。
所以要做聚类首先应该找到数据集的均值和标准差,我们将采用一个叫做最大期望(EM)的优化算法。

具体步骤:
1. 选择簇的数量(与K-Means类似)并随机初始化每个簇的高斯分布参数(均值和方差)。也可以先观察数据给出一个相对精确的均值和方差。
2. 给定每个簇的高斯分布,计算每个数据点属于每个簇的概率。一个点越靠近高斯分布的中心就越可能属于该簇。
3. 基于这些概率我们计算高斯分布参数使得数据点的概率最大化,可以使用数据点概率的加权来计算这些新的参数,权重就是数据点属于该簇的概率。
4. 重复迭代2和3直到在迭代中的变化不大。
GMMs的优点:(1)GMMs使用均值和标准差,簇可以呈现出椭圆形而不是仅仅限制于圆形。K-Means是GMMs的一个特殊情况,是方差在所有维度上都接近于0时簇就会呈现出圆形。
(2)GMMs是使用概率,所有一个数据点可以属于多个簇。例如数据点X可以有百分之20的概率属于A簇,百分之80的概率属于B簇。也就是说GMMs可以支持混合聚类。

5凝聚层次聚类

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

具体步骤:
1. 首先我们将每个数据点视为一个单一的簇,然后选择一个测量两个簇之间距离的度量标准。例如我们使用average linkage作为标准,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。
2. 在每次迭代中,我们将两个具有最小average linkage的簇合并成为一个簇。
3. 重复步骤2知道所有的数据点合并成一个簇,然后选择我们需要多少个簇。
层次聚类优点:(1)不需要知道有多少个簇(2)对于距离度量标准的选择并不敏感
缺点:效率低

 6图团体检测(Graph Community Detection)

当我们的数据可以被表示为网络或图是,可以使用图团体检测方法完成聚类。在这个算法中图团体(graph community)通常被定义为一种顶点(vertice)的子集,其中的顶点相对于网络的其他部分要连接的更加紧密。

具体参见:https://blog.csdn.net/Katherine_hsr/article/details/79382249

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值