《MATLAB 神经网络43个案例分析》:第21章 自组织竞争网络在模式分类中的应用—患者癌症发病预测
1. 前言
《MATLAB 神经网络43个案例分析》是MATLAB技术论坛(www.matlabsky.com)策划,由王小川老师主导,2013年北京航空航天大学出版社出版的关于MATLAB为工具的一本MATLAB实例教学书籍,是在《MATLAB神经网络30个案例分析》的基础上修改、补充而成的,秉承着“理论讲解—案例分析—应用扩展”这一特色,帮助读者更加直观、生动地学习神经网络。
《MATLAB神经网络43个案例分析》共有43章,内容涵盖常见的神经网络(BP、RBF、SOM、Hopfield、Elman、LVQ、Kohonen、GRNN、NARX等)以及相关智能算法(SVM、决策树、随机森林、极限学习机等)。同时,部分章节也涉及了常见的优化算法(遗传算法、蚁群算法等)与神经网络的结合问题。此外,《MATLAB神经网络43个案例分析》还介绍了MATLAB R2012b中神经网络工具箱的新增功能与特性,如神经网络并行计算、定制神经网络、神经网络高效编程等。
近年来随着人工智能研究的兴起,神经网络这个相关方向也迎来了又一阵研究热潮,由于其在信号处理领域中的不俗表现,神经网络方法也在不断深入应用到语音和图像方向的各种应用当中,本文结合书中案例,对其进行仿真实现,也算是进行一次重新学习,希望可以温故知新,加强并提升自己对神经网络这一方法在各领域中应用的理解与实践。自己正好在多抓鱼上入手了这本书,下面开始进行仿真示例,主要以介绍各章节中源码应用示例为主,本文主要基于MATLAB2015b(32位)平台仿真实现,这是本书第二十一章自组织竞争网络在模式分类中的应用实例,话不多说,开始!
2. MATLAB 仿真示例
打开MATLAB,点击“主页”,点击“打开”,找到示例文件
选中chapter21.m,点击“打开”
chapter21.m源码如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:单层竞争神经网络的数据分类—患者癌症发病预测
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Matlab神经网络43个案例分析
% 单层竞争神经网络的数据分类—患者癌症发病预测
% by 王小川(@王小川_matlab)
% http://www.matlabsky.com
% Email:sina363@163.com
% http://weibo.com/hgsz2003
%% 清空环境变量
clc
clear
tic
%% 录入输入数据
% 载入数据并将数据分成训练和预测两类
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)
toc
添加完毕,点击“运行”,开始仿真,输出仿真结果如下:
net =
Neural Network
name: 'Custom Neural Network'
userdata: (your custom info)
dimensions:
numInputs: 1
numLayers: 1
numOutputs: 1
numInputDelays: 0
numLayerDelays: 0
numFeedbackDelays: 0
numWeightElements: 230
sampleTime: 1
connections:
biasConnect: true
inputConnect: true
layerConnect: false
outputConnect: true
subobjects:
input: Equivalent to inputs{
1}
output: Equivalent to outputs{
1}
inputs: {
1x1 cell array of 1 input}
layers: {
1x1 cell array of 1 layer}
outputs: {
1x1 cell array of 1 output}
biases: {
1x1 cell array of 1 bias}
inputWeights: {
1x1 cell array of 1 weight}
layerWeights: {
1x1 cell array of 0 weights}
functions:
adaptFcn: 'adaptwb'
adaptParam: (none)
derivFcn: 'defaultderiv'
divideFcn: (none)
divideParam: (none)
divideMode: 'sample'
initFcn: 'initlay'
performFcn: 'mse'
performParam: .regularization, .normalization
plotFcns: {
}
plotParams: {
1x0 cell array of 0 params}
trainFcn: 'trainru'
trainParam: .showWindow, .showCommandLine, .show, .epochs,
.time
weight and bias values:
IW: {
1x1 cell} containing 1 input weight matrix
LW: {
1x1 cell} containing 0 layer weight matrices
b: {
1x1 cell} containing 1 bias vector
methods:
adapt: Learn while in continuous use
configure: Configure inputs & outputs
gensim: Generate Simulink model
init: Initialize weights & biases
perform: Calculate performance
sim: Evaluate network outputs given inputs
train: Train network with examples
view: View diagram
unconfigure: Unconfigure inputs & outputs
ac =
1 至 19 列
1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1
20 至 38 列
2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 1
39 至 40 列
2 1
Y =
1 至 19 列
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
20 列
1
0
yc =
1 至 19 列
2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1
20 列
1
时间已过 0.491665 秒。
3. 小结
自组织竞争网络自己也是第一次学习,不过通过训练测试信息,可以看到他的网络结构,基本参数大同小异,也是需要设定神经元个数,学习率等参数进行最开始的训练。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第二十一章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。