• 《MATLAB 神经网络43个案例分析》:第38章 基于Kohonen网络的聚类算法——网络入侵聚类


    《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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141

    添加完毕,点击“运行”,开始仿真,输出仿真结果如下:

    
    ans =
    
       493
    
    时间已过 0.827193 秒。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    3. 小结

    Kohonen网络是2001年芬兰科学家Kohonen提出的,是一种称为 自组织特征映射的网络(Self-Organizing feature Map, SOM),属人工神经网络的范畴,是数据挖掘中的无指导学习算法,被广泛应用于聚类分析问题中。
    聚类算法主要涉及如何测度数据点之间的“亲疏程度”以及以怎样的方式实施聚类。Kohonen网络解决这两个问题的基本策略如下:1,采用欧氏距离作为数据点“亲疏程度”的测度,通常适合于数值型聚类变量,但也能够处理重新编码后的分类型聚类变量;2,模拟人脑神经细胞的机理,引入竞争机制,巧妙实现聚类过程。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第三十八章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。

  • 相关阅读:
    核心函数--少儿编程
    JVM原理(GC,内存),JAVA底层
    嵌入式系统,典型嵌入式系统基本组成,微处理器,嵌入式微处理器,嵌入式软硬件裁减原则,嵌入式实时操作系统
    指纹采集技术
    ios 网站打包操作步骤介绍
    WPF/C#:理解与实现WPF中的MVVM模式
    linux使用shell采集内存、与cpu使用率
    C++字面量杂谈
    [附源码]java毕业设计基于web鲜花销售系统论文2022
    c# 递归应用 完成js文件自动引用
  • 原文地址:https://blog.csdn.net/sinat_34897952/article/details/125360623