基于互信息的EEG脑网络情感识别(六)——网络属性及特征提取

上一篇文章介绍了矩阵的二值化,并建立了二值矩阵
这篇主要讲一下网络属性的计算,也就是特征的提取

网络属性

这里我参考的一篇论文里,选取了五种全局属性和两种局部属性,用他们作为特征进行情感识别。下面先对这几个属性做一个概述。

  • 全局属性:
    • 聚类系数
      聚类系数是用来表示图中节点的聚集程度。规则网络与小世界网络具有较高的聚类系数,而随机网络的聚类系数则较低。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


该文章是学习笔记,后续会继续更新

你可能感兴趣的:(脑机接口,网络属性,脑网络,特征提取,情感识别)