基于自组织竞争网络的患者癌症发病预测(matlab代码)

1.案例背景

1.1自组织竞争网络概述

        前面案例中讲述的都是在训练过程中采用有导师监督学习方式的神经网络模型。这种学习方式在训练过程中,需要预先给网络提供期望输出,根据期望输出来调整网络的权重,使得实际输出和期望输出尽可能地接近。但是在很多情况下,在人们认知的过程中没有预知的正确模式,也就是常说的“无师自通”。在这种无监督无期望输出的情况下,基于有导师学习的神经网络往往是无能为力的。自组织神经网络可以通过对客观事件的反复观察、分析与比较,自行提示其内在规律,并对具有共同特征的事物进行正确的分类。此种网络更与人脑中生物神经网络的学习模式类似,即可以通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构,这也是自组织名称的由来。自组织神经网络的学习规则大都采用竞争型的学习规则。
        竞争型神经网络的基本思想是网络竞争层的各个神经元通过竞争来获得对输人模式的响应机会,最后仅有一个神经元成为竞争的胜利者,并将与获胜神经元有关的各连接权值向着更有利于其竞争的方向调整。自组织竞争网络自组织、自适应的学习能力进一步拓宽了神经网络在模式分类和识别方面的应用。

        1.2竟争网络结构和学习算法

        竞争型神经网络有很多具体形式和不同的学习算法,本案例只介绍一种比较简单的网络结构和学习算法,其网络结构如图21-1所示。竞争网络可分为输入层和竞争层。假定输入层由N个神经元构成,竞争层有M个神经元。网络的连接权值为且满足约束条件

        在竞争层中,神经元之间相互竞争,最终只有一个神经元获胜,以适应当前的输入样本。竞争胜利的神经元就代表着当前输人样本的分类模式。竞争型网络的输入样本为二值向量,各元素取值0或者1。竞争层神经元j的状态的计算方式如下:

        式(21-1)中,xi为输入样本向量的第i个元素。根据竞争机制,竞争层中具有最大加权值的神经元k赢得竞争胜利,输出为

基于自组织竞争网络的患者癌症发病预测(matlab代码)_第1张图片

基于自组织竞争网络的患者癌症发病预测(matlab代码)_第2张图片1.3癌症和基因理论概述

        癌症(cancer),医学上称之为恶性肿瘤(malignant neoplasm),是机体在环境污染、化学污染(化学毒素)、电离辐射、自由基毒素﹑微生物(细菌、真菌、病毒等)及其代谢毒素、遗传特性、内分泌失衡、免疫功能紊乱等各种致癌物质﹑致癌因素的作用下导致身体正常细胞发生癌变的结果,常表现为:局部组织的细胞异常增生而形成的局部肿块。癌症是机体正常细胞在多原因、多阶段与多次突变所引起的一大类疾病。癌细胞的特点是;无限制、无止境地增生,使患者体内的营养物质被大量消耗;癌细胞释放出多种毒素,使人体产生--系列症状;癌细胞还可转移到全身各处生长繁殖,导致人体消瘦、无力、贫血、食欲不振、发热以及严重的脏器功能受损等。与恶性肿瘤相对的良性肿瘤容易清除干净,一般不转移、不复发,对器官,组织只有挤压和阻塞作用,但癌症(恶性肿瘤)却会破坏组织、器官的结构和功能,引起坏死出血合并感染,患者最终由于器官功能衰竭而死亡。
        人体基因组图谱好比是一张能说明构成每一个人体细胞脱氧核糖核酸(DNA)的30亿个碱基对精确排列的“地图”。科学家们认为,通过对每一个基因的测定,人们将能够找到新的方法来治疗和预防许多疾病,如癌症和心脏病等。基因有两个特点,一是能忠实地复制自己,以保持生物的基本特征;二是基因能够“突变”,突变绝大多数会导致疾病,另外的一小部分是非致病突变。非致病突变给自然选择带来了原始材料,使生物可以在自然选择中被选择出最适合自然的个体。
        通过使用基因芯片分析人类基因组,可找出致病的遗传基因。癌症、糖尿病等,都是遗传基因缺陷引起的疾病。医学和生物学研究人员将能在数秒钟内鉴定出最终会导致癌症等的突变基因。借助一小滴测试液,医生们能预测药物对病人的功效,可诊断出药物在治疗过程中的不良反应,还能当场鉴别出病人受到了何种细菌、病毒或其他微生物的感染。利用基因芯片分析遗传基因,将使10年后对糖尿病的确诊率达到50%以上。
        未来人们在体检时,由搭载基因芯片的诊断机器人对受检者取血,转瞬间体检结果便可以显示在计算机屏幕上。利用基因诊断,医疗将从千篇一律的“大众医疗”时代,进步到依据个人遗传基因而异的“定制医疗”时代。

2模型建立

1.2模型建立

        本案例中给出了一个含有60个个体基因表达水平的样本。每个样本中测量了114个基因特征,其中前20个样本是癌症病人的基因表达水平的样本(其中还可能有子类),中间的20个样本是正常人的基因表达信息样本,余下的20个样本是待检测的样本(未知它们是否正常)。以下将设法找出癌症与正常样本在基因表达水平上的区别,建立竞争网络模型去预测待检测样本是癌症还是正常样本。
本案例程序中使用的gene.mat是一个60×114的矩阵,即共有60组样本数据,每个样本中包括114个元素。利用newc()函数创建一个自竞争网络。由于需要区分的类别数目为2,因此,竞争层神经元的数目也为2。为了加快学习速度,将学习速率设置为0.1。

1.3 MATLAB实现

        本例中用到的关键函数为建立一个竞争层网络函数 net()其调用格式如下:
net = newc(PR,S,KLR,CLR)

        其中, PR为R个输入元素的最大值和最小值的设定值;S为神经元的数目;KLS为Kohonen学习速率,默认为0.01;CLR为Conscience学习速率,默认为0.001;net为函数返回值,一个新的竞争层。
        由于原始数据是60个个体的集合,本案例中将样本分为训练和预测样本,既前40个为训练样本,后20个为预测样本,代码实现如下:

 

%% Matlab神经网络43个案例分析

 
%% 清空环境变量
clc
clear

%% 录入输入数据
% 载入数据并将数据分成训练和预测两类
load gene.mat;
data=gene;
P=data(1:40,:);
T=data(41:60,:);

% 转置后符合神经网络的输入格式
P=P';
T=T';
% 取输入元素的最大值和最小值Q:
Q=minmax(P);

%% 网络建立和训练
% 利用newc( )命令建立竞争网络:2代表竞争层的神经元个数,也就是要分类的个数。0.1代表学习速率。
net=newc(Q,2,0.1)

% 初始化网络及设定网络参数:
net=init(net);
net.trainparam.epochs=20;
% 训练网络:
net=train(net,P);


%% 网络的效果验证

% 将原数据回带,测试网络效果:
a=sim(net,P);
ac=vec2ind(a)

% 这里使用了变换函数vec2ind(),用于将单值向量组变换成下标向量。其调用的格式为:
%  ind=vec2ind(vec)
% 其中,
% vec:为m行n列的向量矩阵x,x中的每个列向量i,除包含一个1外,其余元素均为0。
% ind:为n个元素值为1所在的行下标值构成的一个行向量。



%% 网络作分类的预测
% 下面将后20个数据带入神经网络模型中,观察网络输出:
% sim( )来做网络仿真
Y=sim(net,T)
yc=vec2ind(Y)

        运行结果如下:

ac =

  1 至 22 列

     1     1     1     1     1     1     1     1     1     1     1     1     2     1     1     1     2     1     1     2     2     2

  23 至 40 列

     2     2     2     2     2     1     1     2     2     1     1     2     2     2     2     1     2     1


Y =

     0     0     1     1     1     1     1     1     1     1     1     1     1     1     1     1     0     1     1     1
     1     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     1     0     0     0


yc =

     2     2     1     1     1     1     1     1     1     1     1     1     1     1     1     1     2     1     1     1

基于自组织竞争网络的患者癌症发病预测(matlab代码)_第3张图片

        由表21-1可知,自竞争网络成功地对40个训练样本进行了聚类,对数据分类的错误率为9/40=22.5%,此模型基本达到了预期的精度要求,并可判断出:癌症输入样本的激活神经元编号为1,正常输人样本的激活神经元编号为2。也就是说,激活了编号为1的神经元的样本属于癌症患者样本,激活了编号为2的神经元的样本属于正常样本。从表21-2可以看出,在20个待检测样本中,1号、2号,17号样本被划分为正常样本,其余17个待检测样本都划分为癌症样本。
        由以上例子,我们可以看出,自组织竞争网络可以看做一个模式识别器,其竞争层每个神经元都代表一个类别。再输人一个新的输人向量时,可以应用sim()函数进行仿真。

4.案例扩展

        从本案例可以拓展的方面如下:
        ①利用基本竞争型网络进行分类,需要首先设定输入向量的类别总数,再由此确定神经元的个数。但是如果利用SOM网络进行分类却不需要这样,SOM网络会自动将差别很小的样本归为一类,差别不大的样本激发的神经元位置也是相邻的。

        ②本案例需要注意的是,重新运行上述代码,可能结果就会不一致,这里因为每次激发的神经元不一样,但是,相似的类激发的神经元总是临近的,差别很大的类激发的神经元相差也比较远。
        ③经过训练,可以看到自竞争网络在很少的训练次数下就能达到较好的效果,并且在处理无监督的数据时,可以指定网络输出的分类。
        ④本例中的预测效果经对患者的随访发现,预测率较高。这对癌症预防有很积极的意义。

完整代码下载链接:

基于自组织竞争网络的患者癌症发病预测(matlab代码)

你可能感兴趣的:(人工智能,算法,神经网络,matlab)