赞
踩
可参考我的另一篇博客
K-means算法详解
算法步骤:
(1) 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。
(2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。
(3) 计算每一类中中心点作为新的中心点。
(4) 重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。
下图演示了K-Means进行分类的过程:
优点:
速度快,计算简便
缺点:
我们必须提前知道数据有多少类/组。
K-Medians是K-Means的一种变体,是用数据集的中位数而不是均值来计算数据的中心点。
K-Medians的优势是使用中位数来计算中心点不受异常值的影响;缺点是计算中位数时需要对数据集中的数据进行排序,速度相对于K-Means较慢。
均值漂移聚类是基于滑动窗口的算法,来找到数据点的密集区域。这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个组/类的中心点。然后对这些候选窗口进行相似窗口进行去除,最终形成中心点集及相应的分组。
具体步骤:
优点:(1)不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。
(2)基于密度的算法相比于K-Means受均值影响较小。
缺点:(1)窗口半径r的选择可能是重要的。
与均值漂移聚类类似,DBSCAN也是基于密度的聚类算法。
具体步骤:
K-Means的缺点在于对聚类中心均值的简单使用。下面的图中的两个圆如果使用K-Means则不能作出正确的类的判断。同样的,如果数据集中的点类似下图中曲线的情况也是不能正确分类的。
使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。因此,每个高斯分布被分配给单个簇。
所以要做聚类首先应该找到数据集的均值和标准差,我们将采用一个叫做最大期望(EM)的优化算法。下图演示了使用GMMs进行最大期望的聚类过程。
具体步骤:
层次聚类算法分为两类:自上而下和自下而上。凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一个单一的簇,然后计算所有簇之间的距离来合并簇,知道所有的簇聚合成为一个簇为止。
下图为凝聚层级聚类的一个实例:
具体步骤:
可参考我的这两篇博客
层次聚类(Hierarchical Clustering)——BIRCH算法详解及举例
层次聚类(Hierarchical Clustering)——CURE算法详解及举例
当我们的数据可以被表示为网络或图是,可以使用图团体检测方法完成聚类。在这个算法中图团体(graph community)通常被定义为一种顶点(vertice)的子集,其中的顶点相对于网络的其他部分要连接的更加紧密。下图展示了一个简单的图,展示了最近浏览过的8个网站,根据他们的维基百科页面中的链接进行了连接。
模块性可以使用以下公式进行计算:
M
=
1
2
L
∑
i
,
j
=
1
N
(
A
i
j
−
k
i
K
j
2
L
)
δ
C
i
,
C
j
M=\frac{1}{2L}\sum^N_{i,j=1}(A_{ij}−\frac{k_iK_j}{2L})\delta_{C_i,C_j}
M=2L1i,j=1∑N(Aij−2LkiKj)δCi,Cj
其中L代表网络中边的数量,
A
i
j
A_{ij}
Aij代表真实的顶点i和j之间的边数,
k
i
,
k
j
k_i,k_j
ki,kj代表每个顶点的degree,可以通过将每一行每一列的项相加起来而得到。两者相乘再除以2L表示该网络是随机分配的时候顶点i和j之间的预期边数。所以
A
i
j
−
k
i
k
j
2
L
A_{ij}−\frac{k_ik_j}{2L}
Aij−2Lkikj代表了该网络的真实结构和随机组合时的预期结构之间的差。当
A
i
j
A_{ij}
Aij为1时,且
k
i
k
j
2
L
\frac{k_ik_j}{2L}
2Lkikj很小的时候,其返回值最高。也就是说,当在定点i和j之间存在一个非预期边是得到的值更高。
δ
C
i
,
C
j
\delta_{C_i,C_j}
δCi,Cj是克罗内克
δ
\delta
δ函数(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(快速贪婪模块性最大化)的算法,这种算法在一定程度上类似于上面描述的集聚层次聚类算法。只是这种算法不根据距离来融合团体,而是根据模块性的改变来对团体进行融合。
具体步骤:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。