随机漫步(Random Walk)
随机漫步是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的,它能用来表示不规则的变动形式,通常假设随机漫步是以马尔可夫链或马可夫过程的形式出现的。随机漫步社群发现的思想是假设一漫步者在一个社区(图)里随机游走,漫步者可能被困在连接稠密的区域里(想象一下初次进入一个道路错综复杂的街区),漫步者很容易被“困”(trapped)在里面,这个稠密区域就是漫步者发现的社群。根据图的属性,定义节点和社群之间的结构相似度进行度量漫步者的“行为”,这种相似度是一种可计算的、高效的距离相似度,这样就可以利用合并层次聚类方法建立社区的层次结构,也就是社区结构。可以利用从i点走向(连接,边)j点的概率定义距离相似度(概率距离),若i和j在同一社群里,概率相对比较高。这种算法最坏情况下的计算复杂度为O(mn^2),m为图的边,n为图的节点。
在此处我尝试了游走步长为2、3、4、5、6这五种情况。
贪婪法(fast greedy)
没找到什么资料,只说参考自:[Finding community structure in very large networks](http://www.arxiv.org/abs/cond-mat/0408187 for the details)
标签传播算法(Label propagation)
标签传播(label propagation)算法是一种近线性算法,其复杂度只有O(km),k为迭代次数,通常情况下k<<m,通过5次迭代95%的节点可以够达到最终类别。算法的基本思想是:每个节点的社群归属即标签由相邻节点的标签决定,相邻节点的最大数的标签即为该节点的标签;可以理解为由邻居投票,和票数多的在一起。初始化时,给每个节点一个独特的标签(类似层次聚类合并算法的初始化),通过标签的传播,密集连接的节点对一个特殊的标签迅速达成共识,这些密集的节点迅速的扩张,直至这些具有相同的标签的节点组成一个社群。这个过程通过迭代完全,同步迭代方式只依赖于上一轮的迭代,异步迭代方式还包含已经更新完成的节点。但是,此算法不保证收敛,需要添加一些限定条件才能保证收敛,一种简单的方法是迭代几次之后随机地断开。如果初始化时,事先标注一些社群的中心节点,是一种不错的方法。
自旋玻璃(Spin Glass)
自旋玻璃是一个物理概念,是一些物理材料的一种状态,代表一种无序的状态。自旋玻璃模型可分为有限维系统、随机有限维连通系统和完全连通系统,如果把社会网络看成一个随机网络场,在一些假设条件下,社会网络可近似于随机有限维连通系统,就可以利用自旋玻璃模型的一些特性来发现和解释社群。对于网络中的一个节点,与其他节点的连接和缺省的连接可看作磁性材料的磁性相互作用和反磁性相互作用,两种相互作用形成一个能力函数,当能量函数最小时,社会网络的层次结构被解释为旋转配置,此时网络内部的组别(聚类)可看作自旋系统的状态,划分组别或网络层次的过程是一个i聚类过程。
模块度最大化(Modularity Community)
模块度最大化算法起源于Newman & Girvan [2004]提出的分割质量的测量标准。他假设随机图不应该有群体结构,所以可以通过比较实际的节点密度与随机图中的节点期望密度里验证群体的存在。优化目标:
Q = (群体中存在的节点数) − (群体中期望存在的节点数)
。应用聚合技术迭代合并节点组组成更大的群体,使模块度在合并后提升。
- 从
券妈妈
上抓取800个左右的电商实体名 - 在所有的候选词内查找这800个电商名,共查找到178个,记为集合NE
- 采用上述的各个子群划分算法,对候选词进行子群划分
- 找到包含有
京东
的那个子群,记录其包含节点的数量,记为Size - 在这个子群里面查找我们上面得到的NE,记录查找到的数目,记为Find。
- 定义
Recall = Find/178
,若子群划分得好,那么该子群应该包含所有的NE,共178个,则Recall=1
。否则说明有些电商名被划分到其他子群中了,故Recall
越大越好
定义F = Recall/Length
作为评价各个子群算法的标准,作散点图如下