基于Kohonen网络的聚类算法

news2024/12/23 14:29:22

1.案例背景

1.1 Kohonen网络

        Kohonen网络是自组织竞争型神经网络的一种,该网络为无监督学习网络,能够识别环境特征并自动聚类。Kohonen神经网络是芬兰赫尔辛基大学教授Teuvo Kohonen 提出的,该网络通过自组织特征映射调整网络权值,使神经网络收敛于一种表示形态。在这一形态中,一个神经元只对某种输人模式特别匹配或特别敏感。Kohonen网络的学习是无监督的自组织学习过程,神经元通过无监督竞争学习使不同的神经元对不同的输人模式敏感,从而特定的神经元在模式识别中可以充当某一输入模式的检测器。网络训练后神经元被划分为不同区域,各区域对输入模型具有不同的响应特征。

        Kohonen神经网络结构为包含输入层和竞争层两层前馈神经网络:第1层为输入层,输入层神经元个数同输入样本向量维数一致,取输人层节点数为m;第2层为竞争层,也称输出层,竞争层节点呈二维阵列分布,取竞争层节点数为n。输入节点和输出节点之间以可变权值全连接,连接权值为wij(i=1,2,…,m;j=1,2,……,n)。Kohonen 网络拓扑结构示意图如图38-1所示。


        Kohonen神经网络算法工作机理为:网络学习过程中,当样本输入网络时,竞争层上的神经元计算输人样本与竞争层神经元权值之间的欧几里得距离,距离最小的神经元为获胜神经元。调整获胜神经元和相邻神经元权值,使获得神经元及周边权值靠近该输人样本。通过反复训练,最终各神经元的连接权值具有一定的分布,该分布把数据之间的相似性组织到代表各类的神经元上,使同类神经元具有相近的权系数,不同类的神经元权系数差别明显。需要注意的是,在学习的过程中,权值修改学习速率和神经元领域均在不断较少,从而使同类神经元逐渐集中。Kohonen网络训练步骤如下。

1.2 网络入侵检测

        网络入侵是指试图破坏计算机和网络系统资源完整性、机密性或可用性的行为。其中,完整性是指数据未经授权不能改变的特性;机密性是指信息不泄露给非授权用户、实体或过程,或供其利用的特性;可用性是可被授权实体访问并按要求使用的特性。人侵检测是通过计算机网络或计算机系统中的若干关键点搜集信息并对其进行分析,从中发现网络或系统中是否有违反安全策略的行为或人侵现象。
        常规的入侵检测方法可以按检测对象、检测方法和实时性等方面进行分类。其中,按检测对象可以分为基于主机的入侵检测系统、基于网络的入侵检测系统和混合型入侵检测系统;按检测方法可以分为误用检测和异常检测;按定时性可以分为定时系统和实时系统。
        近年来,研究人员又提出了一些新的入侵检测方法,比如基于归纳学习的入侵检测方法、基于数据挖掘的人侵检测方法,基于神经网络的人侵检测方法、基于免疫机理的入侵检测方法和基于代理的人侵检测方法等。其中,基于数据挖掘的入侵检测方法是采用数据挖掘中的关联分析,序列模式分析、分类分析或聚类分析来处理数据,从中抽取大量隐藏安全信息,抽象出用于判断和比较的模型,然后利用模式识别入侵行为。

2 模型建立

        基于Kohonen网络的网络入侵攻击聚类算法流程如图38-2所示。

        数据归一化是指把网络人侵数据进行归一化处理。
        网络初始化根据入侵数据特点初始化网络,由于网络入侵数据有38维,人侵数据来自于5种不同类型的网络入侵模式,所以输人层节点数为38。竞争层节点代表输入数据潜在的分类类别,竞争层节点数一般大大多于数据实际类别,选择竞争层节点数为36个,竞争层节点排列在一个6行6列的方阵中。
        按公式(38-1)计算和输入样本最接近的竞争层节点作为该样本的优胜节权值调整根据公式(38-2)调整优胜节点领域半径r内节点权值,其中领域半径和学习速率随着进化过程逐渐变小,这样输入数据逐渐向几个节点集中,从而使网络实现聚类功能。本案例中最大领域rlmax为1.5,最小领域rlmin为0.4,最大学习概率ratelmax为0.1,最小学习概率ratelmin为0.01。网络共学习调整10 000次。

3.编程实现

        根据Kohonen网络原理,在 MATLAB软件中编程实现基于Kohonen 网络的网络入侵分类算法。完整代码如下:

%% 该代码为基于Kohonen网络的分类算法

%% 清空环境变量
clc
clear

%% 数据处理
load data
input=datatrain(:,1:38);
%数据归一化
[inputn,inputps]=mapminmax(input);
%inputn=inputn';
[nn,mm]=size(inputn);

%% 网络构建
%输入层节点数
Inum=38; 

%Kohonen网络
M=6;
N=6; 
K=M*N;%Kohonen总节点数

%Kohonen层节点排序
k=1;
for i=1:M
    for j=1:N
        jdpx(k,:)=[i,j];
        k=k+1;
    end
end

%学习率
rate1max=0.2;   
rate1min=0.05;
%学习半径
r1max=1.5;         
r1min=0.8;

%权值初始化
w1=rand(Inum,K);    %第一层权值

%% 迭代求解
maxgen=10000;
for i=1:maxgen
    
    %自适应学习率和相应半径
    rate1=rate1max-i/maxgen*(rate1max-rate1min);
    r=r1max-i/maxgen*(r1max-r1min);
    
    %从数据中随机抽取
    k=unidrnd(4000);   
    x=inputn(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:K
        %满足增加权值
        if sum(nodeindex==j)
            w1(:,j)=w1(:,j)+rate1*(x'-w1(:,j));
        end
    end
end

%% 聚类结果
Index=[];
for i=1:4000
    [mindist,index]=min(dist(inputn(i,:),w1));
    Index=[Index,index];
end

        netattack. mat里面共有4000组数据,其中第1~1383组数据属于第1类网络入侵方式,第1384~3 238组属于第2类网络入侵方式,第3239~3 357组属于第3类人侵方式,第3358~3948组属于第4类入侵方式,第3949~4000组属于第5类入侵方式。通过计算得到各类入侵数据的优胜节点,如表38-1所列。
        竞争层优胜节点分布如图38-3所示。其中,①代表第1类入侵数据所属节点,②代表第2类入侵数据所属节点,③代表第3类人侵数据所属节点,④代表第4类人侵数据所属节点,⑤代表第5类人侵数据所属节点。空白表示节点不属于任何类。从图38-3可以看出,不同类别的优胜节点基本按块分布,分类算法取得了良好的效果。

4.案例扩展

4.1有监督Kohonen网络原理

        上述内容表明Kohonen网络可以对未知类别数据进行无监督分类,但是分类结果中同一类别数据对应不同的网络节点,如果按照一个节点对应一类来说,Kohonen网络分类的类别比实际数据类别要多。Kohonen网络可以通过在竞争层后增加输出层变为有监督学习的网络(S Kohonen网络),S_Kohonen网络同Kohonen网络相比,增加一层输出层,输出层节点个数同数据类别相同,每个节点代表一类数据。输出层节点和竞争层节点通过权值相连,数据输人S_Kohonen网络,在权值调整时,不仅调整输入层同竞争层优胜节点领域内节点权值,同时调整竞争层优胜节点领域内节点同输出层节点权值,调整方式如下:

        S_Kohonen 网络训练过程同Kohonen网络训练类似,不同的是在调整输人层同竞争层获胜节点权值的同时按公式(38-4)调整竞争层获胜节点同输出层节点之间的权值。
        网络训练完后可对未知样本进行分类,分类时首先计算同未知样本最近的竞争层节点作为优胜节点,与获胜节点连接权值最大的输出层节点代表类别为未知样本类别。
        对于本案例来说,由于数据来源于5种类型的入侵数据,所以网络结构为38—36—5,输入层和竞争层的权值a,随机初始化,竞争层和输出层的权值wjk初始为0。取4 500组网络攻击数据,从中随机抽取4 000组数据训练网络,500组数据测试网络分类能力,MATLAB程序如下。

%% 该代码为基于有导师监督的Kohonen网络的分类算法

%% 清空环境变量
clc
clear

%% 数据处理
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('预测类别','期望类别')

4.2 运行结果分析

        用训练好的S_Kohonen网络分类测试样本数据,分类数据共有500组,分类结果如图38-4所示。从预测结果可以看出,绝大部分测试数据网络分类类别同期望类别一致,500组测试数据分类正确的有492组,正确率为98.4%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/950298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OLAP学习

OLAP又叫联机分析处理&#xff0c;联机分析处理(OLAP)的概念最早是由关系数据库之父E.F.Codd于1993年提出的。 当今的数据处理大致可以分成两大类&#xff1a;联机事务处理OLTP&#xff08;on-linetransactionprocessing&#xff09;、联机分析处理OLAP&#xff08;On-LineAna…

外观模式:简化复杂子系统的访问与使用

文章目录 1. 简介2. 外观模式的基本结构3. 外观模式的实现步骤4. 外观模式的应用与实例4.1 图形界面库的外观模式应用4.2 文件压缩与解压缩的外观模式应用4.3 订单处理系统的外观模式应用 5. 外观模式的优缺点5.1 优点5.2 缺点 6. 总结 1. 简介 外观模式是一种结构型设计模式&…

从过滤器初识责任链设计模式

下面用的过滤器都是注解方式 可以使用非注解方式,就是去web.xml配置映射关系 上面程序的执行输出是 再加一个过滤器 下面来看一段程序 输出结果 和过滤器是否非常相识 但是上面这段程序存在的问题:在编译阶段已经完全确定了调用关系,如果你想改变他们的调用顺序或者继续添加一…

基于MYSQL的主从同步和读写分离

目录 一.完成MySQL主从同步&#xff08;一主两从&#xff09; 1.主库配置 2.建立同步账号 3.锁表设置只读 4.备份数据库数据 5.主库备份数据上传到从库 6.从库上还原备份 7.解锁 8.从库上设定主从同步 9.启动从库同步开关 10.检查状态 二.基于MySQL一主两从配置&…

取数组中每个元素的最高位

1 题目 /*程序将一维数组a中N个元素的最高位取出&#xff0c;保存在一维数组b的对应位置。 程序运行结果为&#xff1a; a&#xff1a;82 756 71629 5 2034 b: 8 7 7 5 2 */ 2 思考 简单来说就是取一个数据的最高位。 一开始的笨方法没有办法判断数据的长度&#xff0c;后来…

nowcoder NC236题 最大差值

目录 题目描述&#xff1a; 示例1 示例2 题干解析&#xff1a; 暴力求解&#xff1a; 代码展示&#xff1a; 优化&#xff1a; 代码展示&#xff1a; 题目跳转https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId128&tqId33768&ru/exa…

BFT最前线|AI透过胸片估测患者年龄,可揭示其患慢性病风险;中信建投:国产人形机器人核心零部件成本下行值得期待

文 | BFT机器人 AI视界 TECHNOLOGY NEWS 看点1 AI模拟芯片能效达传统芯片14倍 《自然》23日发表的研究报道了一种能效为传统数字计算机芯片14倍的人工智能&#xff08;AI&#xff09;模拟芯片。这一由IBM研究实验室开发的芯片在语音识别上的效率超过了通用处理器。该技术或能…

【java中的Set集合】HashSet、LinkedHashSet、TreeSet(最通俗易懂版!!)

目录 一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 二、LinkedHashSet集合 LinkedHashSet集合的特点 三、TreeSet集合 1.TreeSet集合的特点 2.TreeSet的基本使用 四、HashSet、LinkedHashSet、TreeSet的使用场景 五、list和set集合的区别 一、HashSet集合 …

yolo增加mobileone

代码地址&#xff1a;GitHub - apple/ml-mobileone: This repository contains the official implementation of the research paper, "An Improved One millisecond Mobile Backbone". 论文地址&#xff1a;https://arxiv.org/abs/2206.04040 MobileOne出自Apple&am…

java八股文面试[数据库]——B树和B+树的区别

B树是一种树状数据结构&#xff0c;它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度进行查找、顺序读取、插入和删除等操作。 1、B树的特性 B树中允许一个结点中包含多个key&#xff0c;可以是3个、4个、5个甚至更多&#xff0c;并不确定&#xff0c;需要看具体的实…

VBA技术资料MF50:VBA_在Excel中突出显示前3个值

【分享成果&#xff0c;随喜正能量】人受到尊重&#xff0c;不是因为权钱&#xff0c;而是他骨子里透出的&#xff0c;正直与善良。。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高…

RabbitMQ工作模式-路由模式

官方文档参考&#xff1a;https://www.rabbitmq.com/tutorials/tutorial-four-python.html 使用direct类型的Exchange,发N条消息并使用不同的routingKey,消费者定义队列并将队列routingKey、Exchange绑定。此时使用direct模式Exchange必须要routingKey完成匹配的情况下消息才…

Node.js /webpack DAY6

一、Node.js 入门 1. 什么是 Node.js&#xff1f; 2. 什么是前端工程化&#xff1f; 3. Node.js 为何能执行 JS&#xff1f; 4. Node.js 安装 5. 使用 Node.js 总结 6. fs 模块 - 读写文件 /*** 目标&#xff1a;基于 fs 模块 读写文件内容* 1. 加载 fs 模块对象* 2. 写入文件…

Java并发(十五)----synchronized解决共享的问题

为了避免临界区的竞态条件发生&#xff0c;有多种手段可以达到目的。 阻塞式的解决方案&#xff1a;synchronized&#xff0c;Lock 非阻塞式的解决方案&#xff1a;原子变量 此次介绍使用阻塞式的解决方案&#xff1a;synchronized&#xff0c;来解决上述问题&#xff0c;即…

Ubuntu入门03——Ubuntu用户操作

1.Ubuntu如何进入root用户 进入ROOT用户的指令&#xff1a; Linux用su命令来切换用户&#xff1a; su root执行命令后&#xff0c;会提示你输入密码&#xff0c;而Ubuntu是没有设置root初始密码的。 若su命令不能切换root&#xff0c;提示su: Authentication failure&#x…

弹窗、抽屉、页面跳转区别 | web交互入门

当用户点击或触发浏览页面的某个操作&#xff0c;有很多web交互方式&#xff0c;可以大致分为弹窗、抽屉、跳转新页面三种web交互方式。虽然这三种web交互方式看起来没什么不同&#xff0c;但实际上弹窗、抽屉、跳转新页面对交互体验有蛮大的影响。 这需要UI\UX设计师针对不同…

【拾枝杂谈】从游戏开发的角度来谈谈原神4.0更新

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;结合最近的学习内容和以后自己的目标&#xff0c;今天又开了杂谈这个新坑&#xff0c;分享一下我在学习游戏开发的成长和自己的游戏理解&#xff0c;当然现在还是一枚…

Kotlin入门1. 语法基础

Kotlin入门1. 语法基础 一、简介二、在Idea创建一个示例项目三、基本语法1. 第一个程序2. 基本数据类型(1) 数字(2) 类型转换(3) 数学运算位运算 &#xff08;4&#xff09;可空类型 3. 函数4. 字符串(1) 字符串拼接(2) 字符串查找(3) 字符串替换(4) 字符串分割 5. null 安全的…

系统架构师---系统规划

目录 前言&#xff1a; 项目的提出与选择 项目立项的目标和动机 进行基础研究并获取技术 进行应用研发并获得产品 提供技术服务 信息技术产品的使用者 项目的选择和确定 选择有核心价值的产品、项目或可开发方向 评估项目风险、收益和代价 评估项目的多种实施方式 平…