⛄一、DBN

DBN由数个RBM堆叠构成,通常会在顶层加入一个BPNN来实现有监督的分类,DBN中下一层的隐藏层就是上一层的可见层。图1所示的DBN即由两个RBM和顶层一个BPNN构成。

图1 深度置信网络结构

DBN模型的训练分两个阶段:第1阶段是预训练阶段,自下而上分别对每一个RBM进行无监督训练,得到每一层之间的权重w和每一层的偏置b;第2阶段是微调阶段,自上而下对整个DBN中的参数进行微调,以提高模型性能。顶层BPNN接收下一层RBM输出的特征向量作为输入,可以进行无监督训练,也可以在输入层中加入标签实现有监督训练。

DBN在特征提取方面的性能较好,通过顶层BPNN的有监督训练可以学习已知攻击类型的网络流量特征,对于未知的攻击类型也可以通过它在特征提取方面的优势提高检测率,适用于需要处理大量网络数据的入侵检测。

2 RBM
RBM是一种随机神经网络,由一层可见层和一层隐藏层构成,一般可见层为输入层,隐藏层为输出层。RBM同一网络层的神经元无连接,相邻网络层间的神经元全连接。RBM的网络结构如图2所示。

图2 RBM的网络结构
用向量v表示可见层的状态,向量h表示隐藏层的状态,可见层有m个神经元,隐藏层有n′个神经元,vi表示可见层第i个神经元,hj表示隐藏层第j个神经元,RBM的参数θ={wij,ai,bj},wij为两层神经元之间的权重值,ai表示可见层第i个神经元的偏置值,bj表示隐藏层第j个神经元的偏置值。则RBM的能量函数E[5]定义为:

当参数确定时,基于能量函数E可得(v,h)的联合概率分布:

其中,Z(θ)为所有可能情况下的能量和,称为配分因子。
因此,可以得到两层的激活概率分别为:

其中,σ(x)为sigmoid激活函数。

为了尽快得到最大概率,采用对比散度算法训练RBM。该算法通常仅需要1次迭代就可以得到最大概率。对比散度算法利用训练数据初始化可见层,通过条件分布概率得到隐藏层,再通过条件分布概率得到最终的可见层,最终得到的可见层就是输入数据的重建。

3 SSA
SSA是于2020年由薛建凯和沈波根据麻雀的觅食行为和反捕食行为提出的一种新型群智能优化算法。SSA[6]将麻雀分为发现者和加入者,麻雀中发现者和加入者的身份可以互相转换,但是总体比例不变。发现者负责在全局中搜寻食物资源丰富的区域,加入者会监视发现者,靠近发现者的区域进行觅食或者抢夺发现者的食物。当麻雀种群发现危险时,处在边缘区域的麻雀会迅速向安全区域靠拢,处在中心区域的麻雀则会随机移动。SSA的步骤如下:

a.初始化麻雀种群,定义其相关参数,计算所有麻雀个体的适应度并进行排序,找出全局适应度值最优的麻雀,记录其适应度值及其全局最优位置;

b.迭代更新发现者、加入者和意识到危险的麻雀的位置,若当前全局最优适应度值比上一代最优值高就进行更新操作,否则不进行更新操作,继续迭代;

c.适应度函数收敛或达到满足条件,获得全局最优值和最优适应度值。

SSA与其他传统优化算法相比,具有收敛速度快、精度高和不易陷入局部最优值的优势,更容易获得优化问题中的全局最优解。因此,笔者采用SSA对DBN进行优化。

4 SSA优化的DBN模型
4.1 模型总体框架

DBN在特征提取方面具有较好的性能,适用于入侵检测技术。DBN的网络结构是否为最优决定了DBN的性能是否为最佳。但是研究者凭借经验设定的DBN网络结构无法完全发挥DBN的性能。因此,笔者用SSA优化DBN得到新的入侵检测模型SSA-DBN。使用SSA优化DBN的核心思想就是得到位置最优的麻雀,也就是适应度最高的麻雀个体,在迭代结束时根据此麻雀的参数设置DBN的最优网络结构,得到最优的入侵检测模型。

4.2 SSA-DBN模块
SSA-DBN模块的功能是对输入的数据进行识别分类,可分为两个步骤:

a.使用训练数据集对SSA-DBN模块进行训练和参数调优,得到最优入侵检测模型;

b.将测试数据集输入到训练好的SSA-DBN模块中得到分类结果。

该模块基本步骤伪代码如图4所示,其中,I为最大迭代次数,PD为麻雀中发现者的数量,SD为发现危险的麻雀的数量,A为警戒值,s为麻雀种群的数量,F(X)为适应度函数,X表示DBN的网络结构。
该算法首先随机初始化麻雀种群的数量并定义相关参数,计算并找出当前适应度函数的最优值。然后更新麻雀的位置,再次计算当前适应度函数的最优值,若为最优,则X为DBN最优的网络结构参数,否则继续更新麻雀位置直到获得最优值或达到最大迭代次数。最后根据最优参数构建最优入侵检测模型进行识别分类操作。

⛄二、部分源代码

%
clc;
clear;
close all;
addpath(‘./HHO’)
addpath(‘./PSO’)
addpath(‘./SSA2’)
addpath(‘./WOA’)
% function test_example_DBN
%addpath(‘./DBN’)
addpath(‘./DeepBeliefNetworksToolbox’)
load(‘data_feature.mat’);

trainX=double(train_X);
trainYn=double(train_Y);
testX=double(test_X);
testYn=double(test_Y);

[Params,CostFunction] = ParameterDefinition(train_X,train_Y);
%% 算法测试
% HHO
[particle1, GlobalBest1] = Initialization(Params,CostFunction,‘HHO’);
[particle1,GlobalBest1] = HHO(particle1,GlobalBest1,Params,CostFunction);
[er_HHO,trainY_out_HHO,testY_out_HHO] = Cost(GlobalBest1.Position);
% %% PSO
[particle2, GlobalBest2] = Initialization(Params,CostFunction,‘PSO’);
[particle2,GlobalBest2] = PSO2(particle2,GlobalBest2,Params,CostFunction);
[er_PSO,trainY_out_PSO,testY_out_PSO] = Cost(GlobalBest2.Position);

%
% %% SSA
[particle3, GlobalBest3,SD,GlobalWorst3,Predator,Joiner] = Initialization(Params,CostFunction,‘SSA’);
[particle3,GlobalBest3] = SSA(particle3,GlobalBest3,GlobalWorst3,SD,Predator,Joiner,Params,CostFunction);
[er_SSA,trainY_out_SSA,testY_out_SSA] = Cost(GlobalBest3.Position);

%
% %% WOA
[particle4, GlobalBest4] = Initialization(Params,CostFunction,‘WOA’);
[particle4,GlobalBest4] = WOA(particle4,GlobalBest4,Params,CostFunction);
[er_WOA,trainY_out_WOA,testY_out_WOA] = Cost(GlobalBest4.Position);
figure
subplot(121)
plot(train_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(trainY_out_HHO(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘HHO-DBN’)
title(‘哈里斯鹰算法优化DBN训练集预测效果’)
subplot(122)
plot(test_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(testY_out_HHO(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘HHO-DBN’)
title(‘哈里斯鹰算法优化DBN测试集预测效果’)

figure
subplot(121)
plot(train_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(trainY_out_PSO(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘PSO-DBN’)
title(‘粒子群算法优化DBN训练集预测效果’)
subplot(122)
plot(test_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(testY_out_PSO(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘PSO-DBN’)
title(‘粒子群算法优化DBN测试集预测效果’)

figure
subplot(121)
plot(train_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(trainY_out_SSA(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘SSA-DBN’)
title(‘麻雀算法优化DBN训练集预测效果’)
subplot(122)
plot(test_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(testY_out_SSA(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘SSA-DBN’)
title(‘麻雀算法优化DBN测试集预测效果’)

figure
subplot(121)
plot(train_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(trainY_out_WOA(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘WOA-DBN’)
title(‘鲸鱼算法优化DBN训练集预测效果’)
subplot(122)
plot(test_Y(1:100),‘bs-’,‘linewidth’,2);hold on
plot(testY_out_WOA(1:100),‘ro-’,‘linewidth’,2)
xlabel(‘样本’)
legend(‘DBN’,‘WOA-DBN’)
title(‘鲸鱼算法优化DBN测试集预测效果’)

⛄三、运行结果


⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]王家宝,缪祥华.利用麻雀搜索算法优化深度置信网络的入侵检测研究[J].化工自动化及仪表. 2022,49(02)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【DBN分类】基于matlab麻雀算法优化深度置信网络SSA-DBN数据分类【含Matlab源码 2318期】相关推荐

  1. 【DBN分类】基于麻雀算法优化深度置信网络SSA-DBN实现数据分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  2. 【DBN分类】基于哈里斯鹰算法优化深度置信网络HHO-DBN实现数据分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  3. 【DBN分类】基于粒子群算法优化深度置信网络PSO-DBN实现数据分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  4. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  5. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  6. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  7. 【Matlab水果蔬菜识别】形态学水果蔬菜识别【含GUI源码 919期】

    一.代码运行视频(哔哩哔哩) [Matlab水果蔬菜识别]形态学水果蔬菜识别[含GUI源码 919期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅. ...

  8. 【Matlab青草识别】形态学马唐草+牛筋草识别【含GUI源码 908期】

    一.代码运行视频(哔哩哔哩) [Matlab青草识别]形态学马唐草+牛筋草识别[含GUI源码 908期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  9. 【Matlab限速标志识别】形态学限速标志识别【含GUI源码 1142期】

    一.代码运行视频(哔哩哔哩) [Matlab限速标志识别]形态学限速标志识别[含GUI源码 1142期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

最新文章

  1. 关于在linux python源文件头部添加 “#!/usr/bin/env python” 不能直接运行的问题
  2. C++ 继承和派生 及 学生管理范例
  3. Python3 列表list合并的4种方法
  4. 大数据学习笔记19:MR案例——汇总三科成绩表文件
  5. nohup.out文件过大的解决办法
  6. 51单片机复习:外部中断,定时器/计数器中断
  7. vs2005中的aspnetdb(转)
  8. 操作Zookeeper
  9. Java文件编码自动转换工具类(只改变编码,不会改变文件内容)
  10. ENVI 5.3 下载及安装
  11. 一个由2020年1月7日 京东出现的重大 Bug 漏洞引起的思考...
  12. Electron设置窗口图标、设置桌面快捷方式图标
  13. 创新工场汪华:给早期创业者的44条建议
  14. 微淼商学院php面试_微淼商学院校友故事:培养财商,生活会越过越好
  15. win10亮度无法调节,怎么处理
  16. c语言scanf和printf区别,printf和scanf的区别是什么
  17. 单词游戏: hangman
  18. Sentinel Dubbo 适配器看限流与熔断(实战思考篇)
  19. ksxt问题集之——“请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理”
  20. ExtJS 学习专题-如何应用ExtJS

热门文章

  1. rc振荡器振荡频率计算_微控制器中的振荡器频率
  2. mysql 左连接不生效
  3. 演示教学法在计算机基础课程中的应用,浅析项目教学法在《计算机应用基础》课程中的应用...
  4. 区间查询小于等于某数
  5. 剑指offer系列-09.用两个栈设计队列
  6. android识别 dtmf信号,Android 拨号音DTMF 编码解码理论和实战
  7. 俄罗斯方块的设计与实现
  8. json数据的中文显示问题 python
  9. R语言入门学习——Rstudio的安装与学习
  10. Java shared data_Java多个线程之间处理共享数据的方式