本篇内容介绍了“matlab怎么实现SOM神经网络的数据分类”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 自组织特征映射神经网络(SOM)根据输入空间中输入向量的分组进行学习和分类。 在SOM网络中,竞争层中的神经元会尝试识别输入空间邻近该神经元的部分,也就是说,SOM神经网络既可以学习训练数据输入向量的分布特征,也可以学习训练数据输入向量的拓扑结构。与SOM拓扑排序特征有关的重要特点是每个神经元与其近邻神经元也是相关联的,在权值更新过程中,不仅获胜神经元的权值向量得到更新,而且其近邻神经元的权值向量,也按照某个“近邻函数”进行更新,这样在开始时移动量很大,权值向量大致的可按它们的最终位置来排序,最后只移动单个权值向量(微调),这样就形成了一种特殊的分类法,全权向量按照这样一种方式变为有序,即它们在某个“弹性”网格上代表着输入向量。如果网格的某个位置有变化,那么这种变化将影响到次神经元的近邻,但是,离该神经元越远,这种影响就越小,因此在竞争层的神经元位置演变过程中,每个区域代表一类输入向量。 换句话说,要用若干个取值向量来表示一个数据集(输入向量),每个权值相量表示某一类输入向量的均值。 通过训练,可以建立起这样一种布局,它使得每个权值向量都位于输入向量聚类的中心,一旦SOM完成训练,就可以用于对训练数据或其他数据进行聚类。
%% 清空环境变量 clc clear
%% 录入输入数据 % 载入数据 load p;
%转置后符合神经网络的输入格式 P=P';
%% 网络建立和训练 % 建立SOM网络,竞争层为6*6=36个神经元 net=selforgmap([6 6]); plotsom(net.layers{1}.positions) % 5次训练的步数 a=[10 30 50 100 200 500 1000]; % 随机初始化一个1*10向量。 yc=rands(7,8); %% 进行训练 % 训练次数为10次 net.trainparam.epochs=a(1); % 训练网络和查看分类 net=train(net,P); y=sim(net,P); yc(1,:)=vec2ind(y); 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) “matlab怎么实现SOM神经网络的数据分类”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注天达云网站,小编将为大家输出更多高质量的实用文章!
|