上一篇文章介绍了矩阵的二值化,并建立了二值矩阵
这篇主要讲一下网络属性的计算,也就是特征的提取
网络属性
这里我参考的一篇论文里,选取了五种全局属性和两种局部属性,用他们作为特征进行情感识别。下面先对这几个属性做一个概述。
-
全局属性:
- 聚类系数
聚类系数是用来表示图中节点的聚集程度。规则网络与小世界网络具有较高的聚类系数,而随机网络的聚类系数则较低。Ci 表示的是第 i 个节点的聚类系数,ki 表示是节点 i 的全部邻接点数目。
- 平均最短路径长度
平均最短路径长度是用来表示节点之间传输信息的能力。网络的最短路径长度越短,脑区的功能整合水平越高。Lmn代表从节点m到节点n之间的最短路径长度,N为网络中的节点的总数。
- 全局效率
全局效率是用来表示全局信息的处理能力,以及信息传输能力。可以较好的度量网络的全局信息处理和传输能力,以及网络的整合程度。Lmn代表从节点m到节点n之间的最短路径长度,N为网络中的节点的总数。
- 局部效率
局部效率是用来表示局部信息的处理能力,以及信息传输能力。N为网络中的节点的总数。Eg为网络的全局效率。
- 同配系数
同配是指节点更倾向于和它自身相似的点相连接。q代表每条边两边端点的度值的方差,dm、dm 分别代表一条边两端节点的度值。根据网络中节点的趋势可以分为同配网络与异配网络。同配的是指节点趋于和它近似的节点相连;反之,就称该网络是异配的。
- 聚类系数
-
局部属性:
- 节点度
节点度是用来度量图G中一个节点m与其他节点n之间的连接性的属性指标,定义为图G中连接一个节点的相应的边数,是节点的出度与其入度的和。节点度是复杂网络分析当中使用的最为广泛的局部属性之一。
- 中间中心度
中间中心度是节点 m 到节点 n 的最短路径长度是衡量图中节点在图中的中心性大小的指标,是常见的网络局部属性的一种。
- 节点度
关于代码
这里说一下,Matlab里有一个工具包,里面有计算这些属性的函数,大家可以下载这个工具包,自行查找。
下面把BCT工具箱的链接给出:——> 复杂网络工具箱(可以点击进行下载~)
注: 这里面的函数名称都是英文,有些可能翻译出来不完全准确,当时我找的时候还费了点时间,所以这里把需要用到的给标注出来,其他的大家就自己去翻译啦
- 聚类系数:clustering_coef_bin
- 平均最短路径长度:charpath
- 全局效率:efficiency_bin
- 局部效率:efficiency_bin
- 同配系数:assortativity_bin
- 节点度:degrees_und
- 中间中心度:betweenness_bin
(这些都是用于无向网的)
计算网络属性,提取特征
有了以上的准备,下来就简单了,对之前求出的二值矩阵分别计算网络属性,然后求平均值,作为一个MI矩阵的网络属性。这里就不详细说明了,直接上代码了。
pathname1='E:\脑电数据集\二值化矩阵修改\';
pathname3='E:\脑电数据集\网络属性修改\';
%32个被试者
clustering=[];
for k=1:32
if k<10
filename1=sprintf('s0%d\\',k);
end
if k>=10
filename1=sprintf('s%d\\',k);
end
pathname2=[pathname1,filename1];
pathname4=[pathname3,filename1];
mkdir(pathname3,filename1);
%每人40次试验
for j=1:40
if k<10
filename2=sprintf('s0%d-%d',k,j);
filename3=sprintf('s0%d-%d\\',k,j);
end
if k>=10
filename2=sprintf('s%d-%d',k,j);
filename3=sprintf('s%d-%d\\',k,j);
end
mkdir(pathname4,filename3);
pathname5=[pathname2,filename3];
pathname6=[pathname4,filename3];
for i=1:20
filename4=sprintf('%d',i);
xx=load([pathname5,filename4]); %'E:\脑电数据集\二值化矩阵修改\s01\s01-1\1.mat'
labels=xx.labels;
%聚类系数
Theta.MI1.clustering=sum(clustering_coef_bu(xx.Theta.MI1))/32;
Theta.MI2.clustering=sum(clustering_coef_bu(xx.Theta.MI2))/32;
Alpha.MI1.clustering=sum(clustering_coef_bu(xx.Alpha.MI1))/32;
Alpha.MI2.clustering=sum(clustering_coef_bu(xx.Alpha.MI2))/32;
Beta1.MI1.clustering=sum(clustering_coef_bu(xx.Beta1.MI1))/32;
Beta1.MI2.clustering=sum(clustering_coef_bu(xx.Beta1.MI2))/32;
Beta2.MI1.clustering=sum(clustering_coef_bu(xx.Beta2.MI1))/32;
Beta2.MI2.clustering=sum(clustering_coef_bu(xx.Beta2.MI2))/32;
%同配系数
Theta.MI1.assortativity=assortativity_bin(xx.Theta.MI1,0);
Theta.MI2.assortativity=assortativity_bin(xx.Theta.MI2,0);
Alpha.MI1.assortativity=assortativity_bin(xx.Alpha.MI1,0);
Alpha.MI2.assortativity=assortativity_bin(xx.Alpha.MI2,0);
Beta1.MI1.assortativity=assortativity_bin(xx.Beta1.MI1,0);
Beta1.MI2.assortativity=assortativity_bin(xx.Beta1.MI2,0);
Beta2.MI1.assortativity=assortativity_bin(xx.Beta2.MI1,0);
Beta2.MI2.assortativity=assortativity_bin(xx.Beta2.MI2,0);
%全局效率
Theta.MI1.globalefficiency=efficiency_bin(xx.Theta.MI1);
Theta.MI2.globalefficiency=efficiency_bin(xx.Theta.MI2);
Alpha.MI1.globalefficiency=efficiency_bin(xx.Alpha.MI1);
Alpha.MI2.globalefficiency=efficiency_bin(xx.Alpha.MI2);
Beta1.MI1.globalefficiency=efficiency_bin(xx.Beta1.MI1);
Beta1.MI2.globalefficiency=efficiency_bin(xx.Beta1.MI2);
Beta2.MI1.globalefficiency=efficiency_bin(xx.Beta2.MI1);
Beta2.MI2.globalefficiency=efficiency_bin(xx.Beta2.MI2);
%局部效率
Theta.MI1.localefficiency=sum(efficiency_bin(xx.Theta.MI1,1))/32;
Theta.MI2.localefficiency=sum(efficiency_bin(xx.Theta.MI2,1))/32;
Alpha.MI1.localefficiency=sum(efficiency_bin(xx.Alpha.MI1,1))/32;
Alpha.MI2.localefficiency=sum(efficiency_bin(xx.Alpha.MI2,1))/32;
Beta1.MI1.localefficiency=sum(efficiency_bin(xx.Beta1.MI1,1))/32;
Beta1.MI2.localefficiency=sum(efficiency_bin(xx.Beta1.MI2,1))/32;
Beta2.MI1.localefficiency=sum(efficiency_bin(xx.Beta2.MI1,1))/32;
Beta2.MI2.localefficiency=sum(efficiency_bin(xx.Beta2.MI2,1))/32;
%平均最短路径长度
Theta.MI1.path=charpath(xx.Theta.MI1);
Theta.MI2.path=charpath(xx.Theta.MI2);
Alpha.MI1.path=charpath(xx.Alpha.MI1);
Alpha.MI2.path=charpath(xx.Alpha.MI2);
Beta1.MI1.path=charpath(xx.Beta1.MI1);
Beta1.MI2.path=charpath(xx.Beta1.MI2);
Beta2.MI1.path=charpath(xx.Beta2.MI1);
Beta2.MI2.path=charpath(xx.Beta2.MI2);
%节点度
Theta.MI1.modedegree=sum(degrees_und(xx.Theta.MI1))/32;
Theta.MI2.modedegree=sum(degrees_und(xx.Theta.MI2))/32;
Alpha.MI1.modedegree=sum(degrees_und(xx.Alpha.MI1))/32;
Alpha.MI2.modedegree=sum(degrees_und(xx.Alpha.MI2))/32;
Beta1.MI1.modedegree=sum(degrees_und(xx.Beta1.MI1))/32;
Beta1.MI2.modedegree=sum(degrees_und(xx.Beta1.MI2))/32;
Beta2.MI1.modedegree=sum(degrees_und(xx.Beta2.MI1))/32;
Beta2.MI2.modedegree=sum(degrees_und(xx.Beta2.MI2))/32;
%中间中心度
Theta.MI1.betweenness=sum(betweenness_bin(xx.Theta.MI1))/32;
Theta.MI2.betweenness=sum(betweenness_bin(xx.Theta.MI2))/32;
Alpha.MI1.betweenness=sum(betweenness_bin(xx.Alpha.MI1))/32;
Alpha.MI2.betweenness=sum(betweenness_bin(xx.Alpha.MI2))/32;
Beta1.MI1.betweenness=sum(betweenness_bin(xx.Beta1.MI1))/32;
Beta1.MI2.betweenness=sum(betweenness_bin(xx.Beta1.MI2))/32;
Beta2.MI1.betweenness=sum(betweenness_bin(xx.Beta2.MI1))/32;
Beta2.MI2.betweenness=sum(betweenness_bin(xx.Beta2.MI2))/32;
save([pathname6,filename4],'Theta','Alpha','Beta1','Beta2','labels');
end
end
end
该文章是学习笔记,后续会继续更新