基于互信息的EEG脑网络情感识别(五)——矩阵二值化

it2022-05-05  195

上一篇文章介绍了互信息矩阵的建立
这篇文章主要讲一下矩阵的二值化

矩阵二值化

对于一个MI矩阵来说,二值化就是选择一个合适的阈值,如果MI值大于阈值,则记为1,如果MI值小于阈值,则记为0 。按照此方法,依次处理矩阵中的每个值,就能得到二值矩阵。


在解决该问题时遇到的难点和问题

观察得到的MI矩阵可以发现,不同被试者不同次实验中,有些实验数据差别较大,所以重点就在于阈值的选择。

刚开始是这样处理的(后来没用这个方法): 计算了所有MI矩阵中MI的平均值,暂且把这个值叫做“平均MI”,我用这个平均MI作为阈值,对所有矩阵进行了二值化。但是观察二值矩阵发现,很多矩阵出现了全0或者全1的情况。这样的话,对于后面提取网络属性就会有很大误差,所以这个方法被遗弃了。后来采用的方法: 观察MI矩阵的数据发现,MI的值分布在0.66~0.85之间,所以我在这之间,以0.01为步长,设置了20个阈值,以此对MI矩阵进行二值化。这样,每个MI矩阵就会得到20个二值矩阵,将他们都进行保存。 后面计算每个MI矩阵的网络属性时,也是在这20个二值矩阵上分别计算,之后再取平均值,作为最终的网络属性值。
部分代码如下
pathname1='E:\MI矩阵\'; pathname3='E:\二值化矩阵修改\'; 2个被试者 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=[pathname4,filename3]; xx=load([pathname2,filename2]); labels=xx.labels; value=0.66; %初始的阈值,每次增加0.01,直到0.85,共20个 for i=1:20 filename4=sprintf('%d',i); Theta.MI1=traverse(xx.Theta.MI1,value); Theta.MI2=traverse(xx.Theta.MI2,value); Alpha.MI1=traverse(xx.Alpha.MI1,value); Alpha.MI2=traverse(xx.Alpha.MI2,value); Beta1.MI1=traverse(xx.Beta1.MI1,value); Beta1.MI2=traverse(xx.Beta1.MI2,value); Beta2.MI1=traverse(xx.Beta2.MI1,value); Beta2.MI2=traverse(xx.Beta2.MI2,value); save([pathname5,filename4],'Theta','Alpha','Beta1','Beta2','labels'); value=value+0.01; end end end

该文章是学习笔记,后续会继续更新 下一篇文章的链接:基于互信息的EEG脑网络情感识别(六)


最新回复(0)