《MATLAB 神经网络43个案例分析》:第38章 基于Kohonen网络的聚类算法——网络入侵聚类
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位)平台仿真实现,这是本书第三十八章基于Kohonen网络的聚类算法实例,话不多说,开始!
2. MATLAB 仿真示例
打开MATLAB,点击“主页”,点击“打开”,找到示例文件
选中SKohonen.m,点击“打开”
SKohonen.m源码如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:该代码为基于有导师监督的Kohonen网络的分类算法
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-21
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 该代码为基于有导师监督的Kohonen网络的分类算法
%
% <html>
% <table border="0" width="600px" id="table1"> <tr> <td><b><font size="2">该案例作者申明:</font></b></td> </tr> <tr><td><span class="comment"><font size="2">1:本人长期驻扎在此<a target="_blank" href="http://www.ilovematlab.cn/forum-158-1.html"><font color="#0000FF">板块</font></a>里,对该案例提问,做到有问必答。本套书籍官方网站为:<a href="http://video.ourmatlab.com">video.ourmatlab.com</a></font></span></td></tr><tr> <td><font size="2">2:点此<a href="http://union.dangdang.com/transfer/transfer.aspx?from=P-284318&backurl=http://www.dangdang.com/">从当当预定本书</a>:<a href="http://union.dangdang.com/transfer/transfer.aspx?from=P-284318&backurl=http://www.dangdang.com/">《Matlab神经网络30个案例分析》</a>。</td></tr><tr> <td><p class="comment"></font><font size="2">3</font><font size="2">:此案例有配套的教学视频,视频下载方式<a href="http://video.ourmatlab.com/vbuy.html">video.ourmatlab.com/vbuy.html</a></font><font size="2">。 </font></p></td> </tr> <tr> <td><span class="comment"><font size="2"> 4:此案例为原创案例,转载请注明出处(《Matlab神经网络30个案例分析》)。</font></span></td> </tr> <tr> <td><span class="comment"><font size="2"> 5:若此案例碰巧与您的研究有关联,我们欢迎您提意见,要求等,我们考虑后可以加在案例里。</font></span></td> </tr> </table>
% </html>
%% 清空环境变量
clc
clear
tic
%% 数据处理
load data
input=datatrain(:,1:38);
attackkind=datatrain(:,39);
%数据归一化
inputn=input;
[nn,mm]=size(inputn);
[b,c]=sort(rand(1,nn));
%网络期望输出
for i=1:nn
switch attackkind(i)
case 1
output(i,:)=[1 0 0 0 0];
case 2
output(i,:)=[0 1 0 0 0];
case 3
output(i,:)=[0 0 1 0 0];
case 4
output(i,:)=[0 0 0 1 0];
case 5
output(i,:)=[0 0 0 0 1];
end
end
%训练数据
input_train=inputn(c(1:4000),:);
output_train=output(c(1:4000),:);
%% 网络构建
%输入层节点数
Inum=38;
%Kohonen网络
M=6;
N=6;
K=M*N;%Kohonen总节点数
g=5; %输出层节点数
%Kohonen层节点排序
k=1;
for i=1:M
for j=1:N
jdpx(k,:)=[i,j];
k=k+1;
end
end
%学习率
rate1max=0.1;
rate1min=0.01;
rate2max=1;
rate2min=0.5;
%学习半径
r1max=1.5;
r1min=0.4;
%权值初始化
w1=rand(Inum,K); %第一层权值
w2=zeros(K,g); %第二层权值
%% 迭代求解
maxgen=10000;
for i=1:maxgen
%自适应学习率和相应半径
rate1=rate1max-i/maxgen*(rate1max-rate1min);
rate2=rate2min+i/maxgen*(rate2max-rate2min);
r=r1max-i/maxgen*(r1max-r1min);
%从数据中随机抽取
k=unidrnd(4000);
x=input_train(k,:);
y=output_train(k,:);
%计算最优节点
[mindist,index]=min(dist(x,w1));
%计算周围节点
d1=ceil(index/6);
d2=mod(index,6);
nodeindex=find(dist([d1 d2],jdpx')<=r);
%权值更新
for j=1:length(nodeindex)
w1(:,nodeindex(j))=w1(:,nodeindex(j))+rate1*(x'-w1(:,nodeindex(j)));
w2(nodeindex(j),:)=w2(nodeindex(j),:)+rate2*(y-w2(nodeindex(j),:));
end
end
%% 聚类结果
Index=[];
for i=1:4000
[mindist,index]=min(dist(inputn(i,:),w1));
Index=[Index,index];
end
inputn_test=datatest(:,1:38);
%样本验证
for i=1:500
x=inputn_test(i,:);
%计算最小距离节点
[mindist,index]=min(dist(x,w1));
[a,b]=max(w2(index,:));
outputfore(i)=b;
end
length(find((datatest(:,39)-outputfore')==0))
plot(outputfore,'linewidth',1.5)
hold on
plot(datatest(:,39),':r','linewidth',1.5)
title('网络分类','fontsize',12)
xlabel('数据样本','fontsize',12)
ylabel('分类类别','fontsize',12)
legend('预测类别','期望类别')
% web browser www.matlabsky.com
%%
% <html>
% <table width="656" align="left" > <tr><td align="center"><p><font size="2"><a href="http://video.ourmatlab.com/">Matlab神经网络30个案例分析</a></font></p><p align="left"><font size="2">相关论坛:</font></p><p align="left"><font size="2">《Matlab神经网络30个案例分析》官方网站:<a href="http://video.ourmatlab.com">video.ourmatlab.com</a></font></p><p align="left"><font size="2">Matlab技术论坛:<a href="http://www.matlabsky.com">www.matlabsky.com</a></font></p><p align="left"><font size="2">M</font><font size="2">atlab函数百科:<a href="http://www.mfun.la">www.mfun.la</a></font></p><p align="left"><font size="2">Matlab中文论坛:<a href="http://www.ilovematlab.com">www.ilovematlab.com</a></font></p></td> </tr></table>
% </html>
toc
添加完毕,点击“运行”,开始仿真,输出仿真结果如下:
ans =
493
时间已过 0.827193 秒。
3. 小结
Kohonen网络是2001年芬兰科学家Kohonen提出的,是一种称为 自组织特征映射的网络(Self-Organizing feature Map, SOM),属人工神经网络的范畴,是数据挖掘中的无指导学习算法,被广泛应用于聚类分析问题中。
聚类算法主要涉及如何测度数据点之间的“亲疏程度”以及以怎样的方式实施聚类。Kohonen网络解决这两个问题的基本策略如下:1,采用欧氏距离作为数据点“亲疏程度”的测度,通常适合于数值型聚类变量,但也能够处理重新编码后的分类型聚类变量;2,模拟人脑神经细胞的机理,引入竞争机制,巧妙实现聚类过程。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第三十八章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。