自组织特征映射网络(SOFM)
一、网络结构
二、学习算法
%% Matlab神经网络43个案例分析
% 单层竞争神经网络的数据分类—患者癌症发病预测
%% 清空环境变量
clc
clear
%% 录入输入数据
% 载入数据
load p;
%转置后符合神经网络的输入格式
P=P';
%% 网络建立和训练
% newsom建立SOM网络。minmax(P)取输入的最大最小值。竞争层为6*6=36个神经元
net=newsom(minmax(P),[6 6]);
plotsom(net.layers{1}.positions) % neuron position 神经元位置
%{
显示函数(plotsom)
功能:该函数用于绘制自组织特征映射
plotsom(pos)
plotsom(W,D,ND)
pos:神经元位置向量
W:权值矩阵
D:距离矩阵
ND:领域矩阵,默认为1
plotsom(pos):利用红点绘制神经元的位置,将欧氏距离小于等于1的神经元连接起来
plotsom(W,D,ND):将欧氏距离小于等于1的神经元的权值向量连接起来
%}
% 5次训练的步数
a=[10 30 50 100 200 500 1000];
% 随机初始化一个1*10向量。
yc=rands(7,8);
%% 进行训练
% 训练次数为10次
net.trainparam.epochs=a(1); %训练次数为10次
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P); %将训练数据输入网路进行测试,y的维数是36*8,每一列表示把样本分为哪一类。
yc(1,:)=vec2ind(y); %vec2ind(y)的维数是1*8,这个函数求得每列1的位置的下标
plotsom(net.IW{1,1},net.layers{1}.distances)
% 训练次数为30次
net.trainparam.epochs=a(2);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(2,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)
% 训练次数为50次
net.trainparam.epochs=a(3);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(3,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)
% 训练次数为100次
net.trainparam.epochs=a(4);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(4,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)
% 训练次数为200次
net.trainparam.epochs=a(5);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(5,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)
% 训练次数为500次
net.trainparam.epochs=a(6);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(6,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)
% 训练次数为1000次
net.trainparam.epochs=a(7);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(7,:)=vec2ind(y);
plotsom(net.IW{1,1},net.layers{1}.distances)
yc
%% 网络作分类的预测
% 测试样本输入
t=[0.9512 1.0000 0.9458 -0.4215 0.4218 0.9511 0.9645 0.8941]';
% sim( )来做网络仿真
r=sim(net,t);
% 变换函数 将单值向量转变成下标向量。
rr=vec2ind(r)
%% 网络神经元分布情况
% 查看网络拓扑学结构
plotsomtop(net)
% 查看临近神经元直接的距离情况
plotsomnd(net)
% 查看每个神经元的分类情况
plotsomhits(net,P)
有关对于程序的分析解释,参考43个案例分析P193。