数据挖掘——聚类算法(一)
1、聚类的定义
俗话说“人以群分、物以类聚”,聚类的思想就是通过将属性相近的数据分为一类。聚类算法属于非监督算法,即不需要专家样本,让无序的数据自行进行组合,最后达到某种要求之后停止聚集。
2、聚类分类
聚类按照原理角度可以大体分为四类:1)基于原型的聚类(也成为基于距离的聚类);2)基于密度的聚类;3)基于凝聚层次聚类;4)基于概率及生成模型的聚类
1)基于原型的聚类:基于原型的聚类算法主要是先找出一个原型,然后通过聚类度量之后,将其他数据归类到原型中,之后通过重新调整聚类原型,然后再聚类,直至原型不变位置。典型的算法有K_mean算法,FCM(Fuzzy C-Means)算法,均值漂移算法等。
2)基于密度的聚类算法:通过计算密度值,选取核心密度去除噪声区域,将核心密度区域相连接的区域进行融合,直到达到要求停止融合。典型的算法有DBSCAN(Density-Based Spatial Clustering of Applications with Noise)算法,网格密度聚类算法等。
3)基于凝聚层次聚类:主要是通过度量数据之间属性值的差异,逐层进行融合,直到所有数据积聚成一类,之后根据不同层之间的类间的差异实现最终的选取。
4)基于概率及生成模型的聚类:通过统计学原理或者神经网络拟合数据分布,最终实现最终的聚类。典型的算法有高斯混合模型(Gaussian Mixed Model,GMM),自组织神经网络(self-organized learning,SOM),谱聚类算法等。
3、各种聚类算法原理简介
1)k_mean算法:
参考:https://blog.csdn.net/Katherine_hsr/article/details/79382249
算法步骤:
(1) 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。
(2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。
(3) 计算每一类中中心点作为新的中心点。
(4) 重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。
下图演示了K-Means进行分类的过程:
优点:
速度快,计算简便
缺点:
我们必须提前知道数据有多少类/组。
K-Medians是K-Means的一种变体,是用数据集的中位数而不是均值来计算数据的中心点。
K-Medians的优势是使用中位数来计算中心点不受异常值的影响;缺点是计算中位数时需要对数据集中的数据进行排序,速度相对于K-Means较慢。
2)FCM算法
参考:https://www.cnblogs.com/sddai/p/6259553.html
模糊C均值聚类(FCM)是用隶属度确定每个数据点属于某个聚类的程度的一种聚类算法。1973年,Bezdek提出了该算法,作为早期硬C均值聚类(HCM)方法的一种改进。
FCM把n个向量xi(i=1,2,…,n)分为c个模糊组,并求每组的聚类中心,使得非相似性指标的价值函数达到最小。FCM与HCM的主要区别在于FCM用模糊划分,使得每个给定数据点用值在0,1间的隶属度来确定其属于各个组的程度。与引入模糊划分相适应,隶属矩阵U允许有取值在0,1间的元素。不过,加上归一化规定,一个数据集的隶属度的和总等于1:
(6.9)
那么,FCM的价值函数(或目标函数)就是:
(6.10)
这里uij介于0,1间;ci为模糊组I的聚类中心,dij=||ci-xj||为第I个聚类中心与第j个数据点间的欧几里德距离;且是一个加权指数。
构造如下新的目标函数,可求得使(6.10)式达到最小值的必要条件:
(6.11)
这里lj,j=1到n,是(6.9)式的n个约束式的拉格朗日乘子。对所有输入参量求导,使式(6.10)达到最小的必要条件为:
(6.12)
和
(6.13)
由上述两个必要条件,模糊C均值聚类算法是一个简单的迭代过程。在批处理方式运行时,FCM用下列步骤确定聚类中心ci和隶属矩阵U[1]:
步骤1:用值在0,1间的随机数初始化隶属矩阵U,使其满足式(6.9)中的约束条件
步骤2:用式(6.12)计算c个聚类中心ci,i=1,…,c。
步骤3:根据式(6.10)计算价值函数。如果它小于某个确定的阀值,或它相对上次价值函数值的改变量小于某个阀值,则算法停止。
步骤4:用(6.13)计算新的U矩阵。返回步骤2。
上述算法也可以先初始化聚类中心,然后再执行迭代过程。由于不能确保FCM收敛于一个最优解。算法的性能依赖于初始聚类中心。因此,我们要么用另外的快速算法确定初始聚类中心,要么每次用不同的初始聚类中心启动该算法,多次运行FCM。
通过上面的讨论,我们不难看出FCM算法需要两个参数一个是聚类数目C,另一个是参数m。一般来讲C要远远小于聚类样本的总个数,同时要保证C>1。对于m,它是一个控制算法的柔性的参数,如果m过大,则聚类效果会很次,而如果m过小则算法会接近HCM聚类算法。
算法的输出是C个聚类中心点向量和C*N的一个模糊划分矩阵,这个矩阵表示的是每个样本点属于每个类的隶属度。根据这个划分矩阵按照模糊集合中的最大隶属原则就能够确定每个样本点归为哪个类。聚类中心表示的是每个类的平均特征,可以认为是这个类的代表点。
从算法的推导过程中我们不难看出,算法对于满足正态分布的数据聚类效果会很好,另外,算法对孤立点是敏感的。
3)均值漂移算法
参考:https://blog.csdn.net/Katherine_hsr/article/details/79382249
均值漂移聚类是基于滑动窗口的算法,来找到数据点的密集区域。这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个组/类的中心点。然后对这些候选窗口进行相似窗口进行去除,最终形成中心点集及相应的分组。
具体步骤:
1. 确定滑动窗口半径r,以随机选取的中心点C半径为r的圆形滑动窗口开始滑动。均值漂移类似一种爬山算法,在每一次迭代中向密度更高的区域移动,直到收敛。
2. 每一次滑动到新的区域,计算滑动窗口内的均值来作为中心点,滑动窗口内的点的数量为窗口内的密度。在每一次移动中,窗口会想密度更高的区域移动。
3. 移动窗口,计算窗口内的中心点以及窗口内的密度,知道没有方向在窗口内可以容纳更多的点,即一直移动到圆内密度不再增加为止。
4. 步骤一到三会产生很多个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,然后根据数据点所在的滑动窗口进行聚类。
下图演示了均值漂移聚类的计算步骤:
下面显示了所有滑动窗口从头到尾的整个过程。每个黑点代表滑动窗口的质心,每个灰点代表一个数据点。
优点:(1)不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。
(2)基于密度的算法相比于K-Means受均值影响较小。
缺点:(1)窗口半径r的选择可能是不重要的。
4)DBSCAN算法
参考:1.https://www.cnblogs.com/pinard/p/6208966.html
2.https://blog.csdn.net/u014688145/article/details/53388649
具体步骤:
1. 首先确定半径r和minPoints. 从一个没有被访问过的任意数据点开始,以这个点为中心,r为半径的圆内包含的点的数量是否大于或等于minPoints,如果大于或等于minPoints则改点被标记为central point,反之则会被标记为noise point。
2. 重复1的步骤,如果一个noise point存在于某个central point为半径的圆内,则这个点被标记为边缘点,反之仍为noise point。重复步骤1,知道所有的点都被访问过。
优点:不需要知道簇的数量
缺点:需要确定距离r和minPoints
5)网格密度聚类算法
聚类步骤:
1.首先根据数据的属性进行网格划分;
2.对每个网格中的数据点点数进行计数,作为最终的网格的密度值;
3.之后设置阈值Th,当网格密度值超过Th时为核心密度网格,等于Th的网格为边界密度网格,小于Th的网格为噪声密度网格。
4.对核心密度网格进行融合,最终实现聚类效果展示。
6)凝聚层次聚类
层次聚类算法分为两类:自上而下和自下而上。凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一个单一的簇,然后计算所有簇之间的距离来合并簇,知道所有的簇聚合成为一个簇为止。
下图为凝聚层级聚类的一个实例:
具体步骤:
1. 首先我们将每个数据点视为一个单一的簇,然后选择一个测量两个簇之间距离的度量标准。例如我们使用average linkage作为标准,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。
2. 在每次迭代中,我们将两个具有最小average linkage的簇合并成为一个簇。
3. 重复步骤2知道所有的数据点合并成一个簇,然后选择我们需要多少个簇。
层次聚类优点:(1)不需要知道有多少个簇
(2)对于距离度量标准的选择并不敏感
缺点:效率低
7)GMM算法
EM算法:参考https://blog.csdn.net/zhihua_oba/article/details/73776553
高斯混合模型的原理就是假设数据是以多个高斯分布组成,然后应用EM算法的思想进行搜索,最终实现聚类。
使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。因此,每个高斯分布被分配给单个簇。
所以要做聚类首先应该找到数据集的均值和标准差,我们将采用一个叫做最大期望(EM)的优化算法。下图演示了使用GMMs进行最大期望的聚类过程。
具体步骤:
1. 选择簇的数量(与K-Means类似)并随机初始化每个簇的高斯分布参数(均值和方差)。也可以先观察数据给出一个相对精确的均值和方差。
2. 给定每个簇的高斯分布,计算每个数据点属于每个簇的概率。一个点越靠近高斯分布的中心就越可能属于该簇。
3. 基于这些概率我们计算高斯分布参数使得数据点的概率最大化,可以使用数据点概率的加权来计算这些新的参数,权重就是数据点属于该簇的概率。
4. 重复迭代2和3直到在迭代中的变化不大。
GMMs的优点:(1)GMMs使用均值和标准差,簇可以呈现出椭圆形而不是仅仅限制于圆形。K-Means是GMMs的一个特殊情况,是方差在所有维度上都接近于0时簇就会呈现出圆形。
(2)GMMs是使用概率,所有一个数据点可以属于多个簇。例如数据点X可以有百分之20的概率属于A簇,百分之80的概率属于B簇。也就是说GMMs可以支持混合资格。
8)SOM算法
参考:https://blog.csdn.net/wj176623/article/details/52526617
https://blog.csdn.net/weixin_38347387/article/details/80342662
SOM算法本质上就是一个神经网络,只不过是一个非监督神经网络,通过对所有数据放进去自行组合分类来训练神经网络模型。具体可以参考参考的两个博客进行了解