A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
这是我最近看到的一篇论文,思路还是很清晰的,就是改进的LPA算法。改进的地方在两个方面:
(1)结合K-shell算法计算量了节点重重要度NI(node importance),标签更新顺序则按照NI由大到小的顺序更新

得到ks值后,载计算一下节点邻居ks值和度值d的比值
(2)当出现次数最多的标签不止一个时,再计算一下标签重要度LI(label importance)

其实就是找到节点相同标签的那些令居计算一个合值,看着也不难啊
(3)最后这个算法使用的是异步传播
下面是我实现的代码
function Labelnew=NIBlpa(A,alpha)
% A Node Influence Based Label Propagation Algorithm for
% Community Detection in Networks
% [X,Y,Z] = NIBlpa(A,alpha)
%
% Inputs:
% k - clique size
% A - adjacency matrix
%
% Outputs:
% X - detected communities
% Y - all cliques (i.e. complete subgraphs that are not parts of larger
% complete subgraphs)
% Z - k-clique matrix
%
% Author : Yang Yang
% Email : bethansy@yahoo.com
ks=kshell(A);
n=size(A,1);
D=sum(A,2);
NI=ks;
label = 1:size(A,2);
%%
% calculate NI(node importance)
for i=1:n
Nei=find(A(i,:)==1);
NI(i,2)=ks(i,2)+alpha*sum(ks(Nei,2)./D(Nei));
end
sequence=sortrows(NI,-2);
%%
% Label propagation
Label1 = label;
Labelnew = Label1; while(1)
for i=1:n
% 找到邻居下标对应的标签
nb_lables = Labelnew(A(sequence(i,1),:)==1);
% 只考虑了每个节点至少有一个邻居,如果有孤立节点程序不运行保持原标签
if size(nb_lables,2)>0
x = HistRate(nb_lables);
max_nb_labels = x(x(:,2)==max(x(:,2)),1);
if size(max_nb_labels)==1
Labelnew(sequence(i,1))= max_nb_labels;
else
LI=zeros(length(max_nb_labels),1);
for ma=1:length(max_nb_labels)
Nei=find(A(sequence(i),:));
index=Labelnew(Nei)==max_nb_labels(ma);
LI(ma)=sum(NI(Nei(index),2)./D(Nei(index)));
end
[~,maxx]=max(LI);
Labelnew(sequence(i,1))=max_nb_labels(maxx);
end
end end
% 收敛条件,预防跳跃
if Labelnew==Label1
break;
else
Label1 = Labelnew; end
end
下面是调用K-shell算法的代码
function [kvalue]=kshell(A)
% A :邻接矩阵
% A=load('cdbBA_4000_5_0_.txt');
%
n=size(A,1);
kvalue=zeros(n,2);
kvalue(:,1)=[1:n]';
if find(sum(A,2)==0)
kvalue(sum(A,2)==0,2)=0;
end
a=1;k=1;
% 一层循环主要是叫K-shell中k值,当层层剥掉节点度k的节点后,将这些节点边删除,当网络中不再有小于等于k的节点后,k=k+1
while a
D=sum(A,2);
if sum(D)==0
break;
end
b=1;
% 二层循环主要是找到k层的所有节点
while b
index=find(D<=k&D>0);
if isempty(index)
b=0;continue;
else
A(index,:)=0;
A(:,index)=0;
D=sum(A,2);
kvalue(index,2)=k;
end
end
k=k+1;
end
end
但是后在几个数据集上测试效果都非常不好,例如karate上nmi只有0.2多,但是论文中作者得到的结果却是1,我已经把文章看了几遍还是找不出算法和作者哪里有出入,不过发现改进(2)的公式是错误的源头?抓头???其指教
2017.6.15 更新:用这个代码在人工网络上测试,结果和论文中有是一样的了。但是在实际网络karate、dolphin、football中结果和作者给出的结果相差很大。不知道为什么?
A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问的更多相关文章
- LabelRank非重叠社区发现算法介绍及代码实现(A Stabilized Label Propagation Algorithm for Community Detection in Networks)
最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解. 这个算法和Label Propagation 算法不 ...
- SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法
其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...
- 标签传播算法(Label Propagation Algorithm, LPA)初探
0. 社区划分简介 0x1:非重叠社区划分方法 在一个网络里面,每一个样本只能是属于一个社区的,那么这样的问题就称为非重叠社区划分. 在非重叠社区划分算法里面,有很多的方法: 1. 基于模块度优化的社 ...
- Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
转载请注明出处:http://www.cnblogs.com/bethansy/p/6953625.html LPA算法的思路: 首先每个节点有一个自己特有的标签,节点会选择自己邻居中出现次数最多的标 ...
- VIPS: a VIsion based Page Segmentation Algorithm
VIPS: a VIsion based Page Segmentation Algorithm VIPS: a VIsion based Page Segmentation Algorithm In ...
- 标签传播算法(Label Propagation)及Python实现
众所周知,机器学习可以大体分为三大类:监督学习.非监督学习和半监督学习.监督学习可以认为是我们有非常多的labeled标注数据来train一个模型,期待这个模型能学习到数据的分布,以期对未来没有见到的 ...
- Affinity Propagation Algorithm
The principle of Affinity Propagation Algorithm is discribed at above. It is widly applied in many f ...
- 论文笔记之:Dynamic Label Propagation for Semi-supervised Multi-class Multi-label Classification ICCV 2013
Dynamic Label Propagation for Semi-supervised Multi-class Multi-label Classification ICCV 2013 在基于Gr ...
- TOTP:Time-based One-time Password Algorithm(基于时间的一次性密码算法)
TOTP:Time-based One-time Password Algorithm(基于时间的一次性密码算法) TOTP - Time-based One-time Password Algori ...
随机推荐
- Largest product from 3 integers
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...
- 使用bat批处理文件备份mysql数据库
@echo offset date_string=%date:~0,4%_%date:~5,2%_%date:~8,2% //日期set time_string=%time:~0,2%_%time: ...
- Python 运行 Python hello.py 出错,提示: File "<stdin>" , line 1
写了一个hello.py,仅有一句,print 'hello world', 运行 Python hello.py 出错,提示: File "<stdin>" , li ...
- obj-c的优缺点
优点: 1) Cateogies : 类别 2) Posing : 扮演 3) 动态识别 : 编译时与运行时动态识别类型 4) 指标计算 : 指针计算 指针的 +- * / 5) 弹性信息传递 : 某 ...
- poj2462
看八戒在做这个题,我也做了做.. 坑很多,还是要注意细节.不得不吐槽,难道又到了计算几何只能套模板否则就一串WA的情况了么! 要不是八戒做出来了,这题我估计我也就扔到这里了..哥不服啊~所以得做出来! ...
- 取得 APP 自己的版本号 (跨 4 个平台)
http://www.cnblogs.com/onechen/p/3627942.html XE7 源码下载:[原创]取得APP自己的版本号(狠跨4个平台)XE7.zip XE6 源码下载:[原创]取 ...
- api接口签名相关文章
http://www.cnblogs.com/hnsongbiao/p/5478645.htmlhttp://www.cnblogs.com/codeon/p/5900914.html?from=ti ...
- 【Win10】实现控件倒影效果
先引入个小广告: 最近买了台小米盒子折腾下,发觉 UI 还是挺漂亮的,特别是主页那个倒影效果. (图随便找的,就是上面图片底部的那个倒影效果.) 好了,广告结束,回归正题,这个倒影效果我个人觉得是挺不 ...
- 序列化Json时遇到的大小写问题及解决方法
最近在一个webapi2项目中遇到了一个问题:C#编码规范中规定属性的首字母是大写的(大多数公司采用这种编码风格),但是从其它系统中接收到的json对象的属性却是小写的(大多数公司采用这种编码风格), ...
- Change Jenkins time zone
修改Jenkins时区 Debian: vim /etc/defalut/jenkins JAVA_ARGS="-Dorg.apache.commons.jelly.tags.fmt.tim ...