数据聚合的六种方法,7种常用的聚类方法

1. K-Means(K均值)聚类

算法步骤:

)1)首先选择几个类/组,随机初始化每个中心点。 中心点是与各数据点的矢量长度相同的位置。 这需要提前预测类的数量,即中心点的数量。

)2)计算各数据点到中心点的距离,将数据点离哪个中心点最近分为哪一类。

(3)将各级中心点作为新的中心点进行计算。

(4)重复以上步骤,直到各种中心每次迭代变化不大。 也可以多次随机初始化中心点,选择执行结果最好的。

下图显示了k均值分类的过程。

好处:

速度快,计算简单

缺点:

必须事先知道数据的类型/组。

K-Medians是K-Means的一个变体,使用数据集的中心值而不是平均值来计算数据的中心点。

中值的优点是使用中值计算中心点不受异常值的影响。缺点是计算中值时必须对数据集中的数据进行排序,相对于中值,速度较慢。

2 .平均漂移聚类

漂移聚类是一种基于滑动窗口的算法,用于找到数据点的密集区域。 这是一种基于重心的算法,通过将候选中心点更新为滑动窗口中点的平均值来定位每个组/类的中心点。 然后,对这些候选窗口去除类似窗口,最终形成中心点集及其对应的组。

具体步骤:

1 .确定滑动窗口的半径r,然后在圆形滑动窗口中开始滑动,其中随机选择的中心点c的半径为r。 漂移就像登山算法,每次迭代都会向密集区域移动直到收敛。

2 .每次滑动到新区域时,计算滑动窗口中的平均值作为中心点,滑动窗口中的点数作为窗口中的密度。 每次移动时,窗口都希望移动密度更高的区域。

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

4 .第1步到第3步生成多个滑动窗口。 如果多个滑动窗口重叠,请保留包含最多点的窗口,并基于包含数据点的滑动窗口进行聚类。

下图显示了平均漂移聚类的计算过程。

以下是从滑动窗口开始到结束的整个过程。 黑点表示滑动窗口的重心,灰色点表示数据点。

优点: (1)与均值算法不同,均值漂移聚类算法不需要我们知道的类/组数量。

)基于密度的算法与k均值相比,平均值的影响较小。

缺点:)1)选择窗口半径r可能不重要。

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

和平均漂移聚类一样,DBSCAN也是一种基于密度的聚类算法。

具体步骤:

1 .首先确定半径r和minPoints。 根据未访问的任意数据点,判断以该点为中心、以r为半径的圆内包含的点数是否为minPoints以上,如果为minPoints以上,则标记为central point,否则为noise point以上

重复2.1中的步骤。 如果central point位于半径圆内,则该点标记为边缘点,反之则保留为noise point。 重复步骤1,知道所有的点都被访问了。

优点:不需要知道集群的数量

缺点:需要确定距离r和最小点

4 .用勤奋的发带混合模型(GMM )的最大期望) EM )进行聚类

均值的缺点是聚类中心平均值的简单使用。 下图中的两个圆如果使用k均值,则无法判断正确的类。 同样,数据集内的点如下图所示的曲线时也无法正确分类。

如果使用密集的发带混合模型(GMM )进行聚类,则首先假设数据点具有密集的发带分布,假设数据点对应于k均值为圆形,然后假设密集的发带分布(椭圆形)为圆形有两个参数表示集群的形状。 平均值和标准偏差。 因此,这些簇在x、y方向上存在标准偏差,所以可以采用任意形状的椭圆形。 因此,每个稀疏发带的分布都分配给一个群集。

所以聚类首先要找到数据集的均值和标准差,我们采用称为最大期望(EM )的优化算法。 下图显示了使用GMMs实现最大期望的群集过程。

具体步骤:

1 .选择集群的数目(类似于均值),随机初始化每个集群的稀疏发带分布参数(平均值和方差)。 也可以先观察数据,给出相对准确的均值和方差。

2 .给出每个集群的密集发带分布,并计算每个数据点属于每个集群的概率。 一个点越接近勤奋发带分布的中心,越有可能属于该簇。

3 .根据这些概率,计算仔细的发带分布参数,以使数据点的概率最大化。 可以使用数据点概率的权重来计算这些新参数。 权重是数据点属于该集群的概率。

4 .重复迭代2和3,直到迭代中变化不大。

GMMs的优点: (1) GMMs使用均值和标准差,团簇可以呈现椭圆形,而不限于圆形。 均值是GMMs的一种特殊情况,当方差在所有维数都接近0时,聚类呈圆形。

) GMMs是使用概率,其中所有一个数据点都可以属于多个集群。 例如,数据点x可以有20%的概率属于a集群,并且有80%的概率属于b集群。 也就是说,GMMs可以支持混合资格。

/p> 5. 凝聚层次聚类

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

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

6. 图团体检测(Graph Community Detection)

当我们的数据可以被表示为网络或图是,可以使用图团体检测方法完成聚类。在这个算法中图团体(graph community)通常被定义为一种顶点(vertice)的子集,其中的顶点相对于网络的其他部分要连接的更加紧密。下图展示了一个简单的图,展示了最近浏览过的8个网站,根据他们的维基百科页面中的链接进行了连接。

模块性可以使用以下公式进行计算:

其中L代表网络中边的数量,Aij代表真实的顶点i和j之间的边数, ki,kj代表每个顶点的degree,可以通过将每一行每一列的项相加起来而得到。两者相乘再除以2L表示该网络是随机分配的时候顶点i和j之间的预期边数。所以代表了该网络的真实结构和随机组合时的预期结构之间的差。当Aij为1时,且很小的时候,其返回值最高。也就是说,当在定点i和j之间存在一个非预期边是得到的值更高。
是克罗内克δ函数(Kronecker-delta function). 下面是其Python解释:

def Kronecker_Delta(ci,cj): if ci==cj: return 1 else: return 0

通过上述公式可以计算图的模块性,且模块性越高,该网络聚类成不同团体的程度越好,因此通过最优化方法寻找最大模块性就能发现聚类该网络的最佳方法。
组合学告诉我们对于一个仅有8个顶点的网络,就存在4140种不同的聚类方式,16个顶点的网络的聚类方式将超过100亿种。32个顶点的网络的可能聚类方式更是将超过10^21种。因此,我们必须寻找一种启发式的方法使其不需要尝试每一种可能性。这种方法叫做Fast-Greedy Modularity-Maximization(快速贪婪模块性最大化)的算法,这种算法在一定程度上类似于上面描述的集聚层次聚类算法。只是这种算法不根据距离来融合团体,而是根据模块性的改变来对团体进行融合。
具体步骤:
1. 首先初始分配每个顶点到其自己的团体,然后计算整个网络的模块性 M。
2. 第 1 步要求每个团体对(community pair)至少被一条单边链接,如果有两个团体融合到了一起,该算法就计算由此造成的模块性改变 ΔM。
3. 第 2 步是取 ΔM 出现了最大增长的团体对,然后融合。然后为这个聚类计算新的模块性 M,并记录下来。
4. 重复第 1 步和 第 2 步——每一次都融合团体对,这样最后得到 ΔM 的最大增益,然后记录新的聚类模式及其相应的模块性分数 M。
5. 重复第 1 步和 第 2 步——每一次都融合团体对,这样最后得到 ΔM 的最大增益,然后记录新的聚类模式及其相应的模块性分数 M。

————————————————
版权声明:本文为CSDN博主「诗蕊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mmdxlb_hsr/article/details/79382249

一分快三技巧准确率100需要知道有多少个簇
(2)对于距离度量标准的选择并不敏感
缺点:效率低

6. 图团体检测(Graph Community Detection)

当我们的数据可以被表示为网络或图是,可以使用图团体检测方法完成聚类。在这个算法中图团体(graph community)通常被定义为一种顶点(vertice)的子集,其中的顶点相对于网络的其他部分要连接的更加紧密。下图展示了一个简单的图,展示了最近浏览过的8个网站,根据他们的维基百科页面中的链接进行了连接。

模块性可以使用以下公式进行计算:

其中L代表网络中边的数量,Aij代表真实的顶点i和j之间的边数, ki,kj代表每个顶点的degree,可以通过将每一行每一列的项相加起来而得到。两者相乘再除以2L表示该网络是随机分配的时候顶点i和j之间的预期边数。所以代表了该网络的真实结构和随机组合时的预期结构之间的差。当Aij为1时,且很小的时候,其返回值最高。也就是说,当在定点i和j之间存在一个非预期边是得到的值更高。
是克罗内克δ函数(Kronecker-delta function). 下面是其Python解释:

def Kronecker_Delta(ci,cj): if ci==cj: return 1 else: return 0

通过上述公式可以计算图的模块性,且模块性越高,该网络聚类成不同团体的程度越好,因此通过最优化方法寻找最大模块性就能发现聚类该网络的最佳方法。
组合学告诉我们对于一个仅有8个顶点的网络,就存在4140种不同的聚类方式,16个顶点的网络的聚类方式将超过100亿种。32个顶点的网络的可能聚类方式更是将超过10^21种。因此,我们必须寻找一种启发式的方法使其不需要尝试每一种可能性。这种方法叫做Fast-Greedy Modularity-Maximization(快速贪婪模块性最大化)的算法,这种算法在一定程度上类似于上面描述的集聚层次聚类算法。只是这种算法不根据距离来融合团体,而是根据模块性的改变来对团体进行融合。
具体步骤:
1. 首先初始分配每个顶点到其自己的团体,然后计算整个网络的模块性 M。
2. 第 1 步要求每个团体对(community pair)至少被一条单边链接,如果有两个团体融合到了一起,该算法就计算由此造成的模块性改变 ΔM。
3. 第 2 步是取 ΔM 出现了最大增长的团体对,然后融合。然后为这个聚类计算新的模块性 M,并记录下来。
4. 重复第 1 步和 第 2 步——每一次都融合团体对,这样最后得到 ΔM 的最大增益,然后记录新的聚类模式及其相应的模块性分数 M。
5. 重复第 1 步和 第 2 步——每一次都融合团体对,这样最后得到 ΔM 的最大增益,然后记录新的聚类模式及其相应的模块性分数 M。

————————————————
版权声明:本文为CSDN博主「诗蕊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mmdxlb_hsr/article/details/79382249

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注