【复杂网络系列】社团发现简介

无论从理论研究还是从实际应用的角度来看,研究网络中的社团结构都是非常重要的,原因如下:1,可以从网络的局部结构上更好地理解节点与边的结构与功能;2.可以以社团为基本单位从中观层次更好地理解整个网络的动态性;3.可以从更加粗略的层次上揭示网络的层次结构,并有助于理解网络真是的起源于演化机制;4.为真实世界中规模庞大的、稀疏的链接数据提供了一种仅仅依靠链接关系的聚类方法,而无需依赖于数据的其他属性。



一般意义上讲,一个社团也可以被称为群、聚类或模块,是网络中一群阶段或边的集合,其内部的节点间连接较为紧密,而社团间的连接却相对稀疏。

社团发现的具体应用包括:社会网络中的社团发现、文本和Web网络张的话题聚类、网络中的拥塞查找和搜索的优化策略、生物网络中基因和蛋白质的新功能发现、协同过滤、网络的等级结构与节点作用分析等等。


从数据挖掘及机器学习的观点来看,可以将网络中的社团发现称为网络中节点聚类与链接聚类。在分析了网络的宏观特征后,社团结构作为在中观层次上理解网络的一个关键概念,称为了研究网络的一个重点。然后,当前,学术界对于社团的定义并没有统一的标准,因此也不存在标准的社团发现算法。


发现网络中的密集子图在许多领域,如生物网络分析、社会网络分析、可视化分析等领域都有着非常广泛且重要的应用。在社会网络分析领域,社团往往被非常严格地定义为一些子图结构,在这些子图中任意一个节点都需要是期全节点的朋友。这种最严格的定义要求社团中的每个节点都必须与其余节点存在链接关系,因此这种社团实际上就是极大团。为了在充满噪声的网络中寻找统计明显的社团结构,找出网络中的极大团是一种非常有效的途径。在真是大规模网络中,极大团发现算法有以下优点:首先,极大团与随机图相比其统计意义很明显,所以极大团是寻找网络中密集子图的一种有效方法也是去噪声的有效途径;同时,虽然这类极大团发现算法在稠密网络中时间复杂度很高,但是在真实大规模稀疏网络中的速度却非常快;人们还可以用这些极大团组合成其他较为密集的社团,如k-clique-链。


非重叠社团发现算法

网络的节点划分(Partition)就是讲网络分为不同的聚类,其中每个节点仅仅数以一个节点社团。当前学术界已经基于许多不同的技术与思想提出了大量新颖的社团发现算法:切边算法、全局模块度优化算法、局域模块度优化算法、标记传播算法、极大团过滤算法、随机游走算法、谱方法优化方法、链接划分算法等等。模块度函数所定义的社团可以简洁地描述为:一个社团是一个子图,且该子图中的内部链接条数应该大于该子图的随机模型所产生的边的条数。



当前最具影响力的重叠社团发现算法可能应属极大团过滤算法(Clique Percolation Method,CPM算法)。极大团过滤算法(CPM算法)通过极大团过滤的方式提供了一种优雅的重叠社团发现方法。然而,极大团过滤算法的最主要一个缺陷就是其对社团的定义过于刻板。当网络很稠密时,这个算法在极大团过滤时就会处于超临界状态,因而得到非常多的紧密连接的重叠社团。当网络很稀疏时,这个算法在极大团过滤时就会处于亚临界状态,因而得到很少的、相互连接的、可用于合并的极大团。这个算法的时间复杂度非常高,寻仙号网络中的极大团的时间复杂度是指数级的,同时极大团的合并的时间复杂度是平方级的。为了加速极大团过滤算法,Kumpula等提出了CPM算法的改进型算法-SCP算法,SCP算法的复杂度会随着网络中k-cliques的数目线性增长。



测试一个社团发现算法的准确性通常意味着:将该算法应用在一个社团结构已知的网络上,然后将发现的社团结构与已知的社团结构进行对比。因此,哪些学术界公认的、社团结构已知的、标准测试网络对于社团发现算法准确性的测试是非常重要的。人们通常使用计算机生成的、具有内在社团结构的人工网络作为最可靠的标准测试网络。其中较为著名的人工测试网络包括:Girvan与Newman提出的具有均质社团结构的测试网络,简称GN标准测试网络,以及近年来Lancichinetti等提出的具有异质社团结构的测试网络,简称LER标准测试网络。


转载自:http://hi.baidu.com/moguichi/item/c53d0b4041bf140de83504ac

动态链路预测是一种预测网络中节点间连接关系的技术,常用于社交网络、蛋白质相互作用网络等领域。下面是一个简单的基于 Matlab 实现的动态链路预测代码示例: ``` % 加载网络数据 load('network.mat'); % 分割训练集和测试集 num_nodes = size(network, 1); test_ratio = 0.2; test_size = round(num_nodes * test_ratio); train_size = num_nodes - test_size; train_set = network(1:train_size, :); test_set = network(train_size+1:end, :); % 计算相似度矩阵 similarity = zeros(num_nodes, num_nodes); for i = 1:num_nodes for j = i+1:num_nodes common_neighbors = intersect(find(train_set(i,:)), find(train_set(j,:))); similarity(i,j) = length(common_neighbors); similarity(j,i) = similarity(i,j); end end % 计算预测准确率 predicted_links = zeros(test_size, 2); for i = 1:test_size node1 = i + train_size; node2_candidates = setdiff(1:num_nodes, [node1 find(train_set(node1,:))]); node2_similarities = similarity(node1, node2_candidates); [sorted_similarities, sorted_indices] = sort(node2_similarities, 'descend'); predicted_links(i,:) = [node1, node2_candidates(sorted_indices(1))]; end accuracy = sum(ismember(test_set, predicted_links, 'rows')) / test_size; fprintf('Accuracy: %.4f\n', accuracy); ``` 其中,`network` 是一个二维矩阵,表示网络中节点间的连接关系,例如 `network(i,j)` 等于 1 表示节点 i 和节点 j 之间有连接,等于 0 表示没有连接。代码中的相似度计算使用的是共同邻居数,可以根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值