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

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

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

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

为了提高短期光伏发电预测的准确性,文中采用深度置信网络(DBN)建立了各模型函数的预测模型.通过分析各模型函数的特征,建立了光伏发电模型的功率预测.传统的基于神经网络的功率预测难以训练多层网络,影响其预测精度.DBN采用无监督贪婪逐层训练算法构建了一个在回归预测分析中具有优异性能的多隐层网络结构,已成为深度学习领域的研究热点.DBN参数采用麻雀优化算法(SSA)优化,避免出现由随机初始化导致的局部最优解现象,从而提高了DBN网络预测性能.最后,案例测试显示了所提出模型的有效性.

⛄ 部分代码

function [fMin , bestX, Convergence_curve] = SSA(X, N, M, c, d, dim, fobj)


P_percent = 0.2;    % 发现者的种群规模占总种群规模的百分比


pNum = round(N*P_percent);    % 发现者数量20%


SD = pNum/2;      % 警戒者数量10%


ST = 0.8;           % 安全阈值

lb = c.*ones(1, dim);     % 下限

ub = d.*ones(1,dim);    % 上限

% 初始化

for i = 1:N

%     X(i, :) = lb + (ub - lb) .* rand(1, dim);

   fitness(i) = fobj(X(i, :));

end

pFit = fitness;

pX = X;                            % 与pFit相对应的个体最佳位置

[fMin, bestI] = min(fitness);      % fMin表示全局最优解

bestX = X(bestI, :);             % bestX表示全局最优位置


%% 迭代寻优

for t = 1 : M      

   [~, sortIndex] = sort(pFit);            % 排序

   

   [fmax, B] = max(pFit);

   worst = X(B, :);

   

   %% 发现者位置更新

   r2 = rand(1);

   if r2 < ST

       for i = 1:pNum      % Equation (3)

           r1 = rand(1);

           X(sortIndex(i), :) = pX(sortIndex(i), :)*exp(-(i)/(r1*M));

           X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

           fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

       end

   else

       for i = 1:pNum

           X(sortIndex(i), :) = pX(sortIndex(i), :)+randn(1)*ones(1, dim);

           X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

           fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

       end

   end

   

   [~, bestII] = min(fitness);

   bestXX = X(bestII, :);

   

   %% 跟随者位置更新

   for i = (pNum+1):N                     % Equation (4)

       A = floor(rand(1, dim)*2)*2-1;

       if i > N/2

           X(sortIndex(i), :) = randn(1)*exp((worst-pX(sortIndex(i), :))/(i)^2);

       else

           X(sortIndex(i), :) = bestXX+(abs((pX(sortIndex(i), :)-bestXX)))*(A'*(A*A')^(-1))*ones(1, dim);

       end

       X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

       fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

   end

   

   %% 警戒者位置更新

   c = randperm(numel(sortIndex));

   b = sortIndex(c(1:SD));

   for j = 1:length(b)      % Equation (5)

       if pFit(sortIndex(b(j))) > fMin

           X(sortIndex(b(j)), :) = bestX+(randn(1, dim)).*(abs((pX(sortIndex(b(j)), :) -bestX)));

       else

           X(sortIndex(b(j)), :) = pX(sortIndex(b(j)), :)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)), :)-worst))/(pFit(sortIndex(b(j)))-fmax+1e-50);

       end

       X(sortIndex(b(j)), :) = Bounds(X(sortIndex(b(j)), :), lb, ub);

       fitness(sortIndex(b(j))) = fobj(X(sortIndex(b(j)), :));

   end

   

   for i = 1:N

       % 更新个体最优

       if fitness(i) < pFit(i)

           pFit(i) = fitness(i);

           pX(i, :) = X(i, :);

       end

       % 更新全局最优

       if pFit(i) < fMin

           fMin = pFit(i);

           bestX = pX(i, :);

       end

   end

   Convergence_curve(t) = fMin;

   

   disp(['SSA: At iteration ', num2str(t), ' ,the best fitness is ', num2str(fMin)]);

end


%% 边界处理

function s = Bounds(s, Lb, Ub)

% 下界

temp = s;

I = temp < Lb;

temp(I) = Lb(I);


% 上界

J = temp > Ub;

temp(J) = Ub(J);

% 更新

s = temp;


⛄ 运行结果

⛄ 参考文献

[1]吴涛. 基于PSO优化VMD和深度信念网络的滚动轴承故障诊断研究.

[2]王新颖, 赵斌, 张瑞程,等. 基于IPSO-DBN的管道故障诊断方法[J]. 消防科学与技术, 2021, 040(002):263-267.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1天前
|
机器学习/深度学习 算法 分布式数据库
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码(下)
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码
7 1
|
1天前
|
算法
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码(上)
数据结构与算法⑭(第四章_下)二叉树的模拟实现和遍历代码
9 1
|
4天前
|
算法
MATLAB|【免费】融合正余弦和柯西变异的麻雀优化算法SCSSA-CNN-BiLSTM双向长短期记忆网络预测模型
这段内容介绍了一个使用改进的麻雀搜索算法优化CNN-BiLSTM模型进行多输入单输出预测的程序。程序通过融合正余弦和柯西变异提升算法性能,主要优化学习率、正则化参数及BiLSTM的隐层神经元数量。它利用一段简单的风速数据进行演示,对比了改进算法与粒子群、灰狼算法的优化效果。代码包括数据导入、预处理和模型构建部分,并展示了优化前后的效果。建议使用高版本MATLAB运行。
|
6天前
|
算法 Python
利用贝叶斯算法对简单应用实现预测分类
利用贝叶斯算法对简单应用实现预测分类
6 0
|
6天前
|
机器学习/深度学习 算法 API
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
9 0
|
6天前
|
算法 关系型数据库 C语言
卡尔曼滤波简介+ 算法实现代码(转)
卡尔曼滤波简介+ 算法实现代码(转)
20 4
|
6天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
6天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
6天前
|
算法 调度
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)