%% 清空环境变量
clc;
clear;
warning off
close all
%% 添加路径
addpath("Toolbox\")
%% 读取数据
res = xlsread('数据集.xlsx');
%% 分析数据
num_class = length(unique(res(:, end))); % 类别数(Excel最后一列放类别)
num_res = size(res, 1); % 样本数(每一行,是一个样本)
num_size = 0.7; % 训练集占数据集的比例
res = res(randperm(num_res), :); % 打乱数据集(不打乱数据时,注释该行)
flag_conusion = 1; % 标志位为1,打开混淆矩阵(要求2018版本及以上)
%% 设置变量存储数据
P_train = []; P_test = [];
T_train = []; T_test = [];
%% 划分数据集
for i = 1 : num_class
mid_res = res((res(:, end) == i), :); % 循环取出不同类别的样本
mid_size = size(mid_res, 1); % 得到不同类别样本个数
mid_tiran = round(num_size * mid_size); % 得到该类别的训练样本个数
P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 训练集输入
T_train = [T_train; mid_res(1: mid_tiran, end)]; % 训练集输出
P_test = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)]; % 测试集输入
T_test = [T_test; mid_res(mid_tiran + 1: end, end)]; % 测试集输出
end
%% 数据转置
P_train = P_train'; P_test = P_test';
T_train = T_train'; T_test = T_test';
%% 得到训练集和测试样本个数
M = size(P_train, 2);
N = size(P_test , 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
t_train = ind2vec(T_train);
t_test = ind2vec(T_test );
%% 转置以适应模型
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';
%% 参数设置
fun = @getObjValue; % 目标函数
dim = 5; % 优化参数个数
lb = [ 20, 20, 20, 1.0, 100]; % 优化参数目标下限
ub = [ 80, 80, 80, 3.0, 600]; % 优化参数目标上限
pop = 6; % 种群数量
Max_iteration = 10; % 最大迭代次数
%% 优化算法
[Best_score,Best_pos, curve] = PSO(pop, Max_iteration, lb, ub, dim, fun);
%% 模型预训练
Best_pos(1: 3)=round(Best_pos(1: 3));
% -------- 修改这里参数时,应对应修改子函数 getObjValue 的相关参数 ---------------
dbn.sizes = Best_pos(1: 3); % 隐藏层节点
opts.numepochs = 100; % 训练次数
opts.batchsize = M; % 每次训练样本个数 需满足:(M / batchsize = 整数)
opts.momentum = 0; % 学习率的动量
opts.alpha = 0.01; % 学习率
dbn = dbnsetup(dbn, p_train, opts); % 建立模型
dbn = dbntrain(dbn, p_train, opts); % 训练模型
%% 训练权重移植,添加输出层
nn = dbnunfoldtonn(dbn, num_class);
%% 反向调整网络
% -------- 修改这里参数时,应对应修改子函数 getObjValue 的相关参数 ---------------
Best_pos(5)=round(Best_pos(5));
opts.numepochs = Best_pos(5); % 反向微调次数
opts.batchsize = M; % 每次反向微调样本数 需满足:(M / batchsize = 整数)
nn.activation_function = 'sigm'; % 激活函数
nn.learningRate = Best_pos(4); % 学习率
nn.momentum = 0.5; % 动量参数
nn.scaling_learningRate = 1; % 学习率的比例因子
[nn, loss, accu] = nntrain(nn, p_train, t_train, opts); % 训练
%% 仿真预测
T_sim1 = nnpredict(nn, p_train);
T_sim2 = nnpredict(nn, p_test );
%% 性能评价
error1 = sum((T_sim1' == T_train)) / M * 100 ;
error2 = sum((T_sim2' == T_test )) / N * 100 ;
%% 适应度曲线
figure
plot(1: length(curve), curve, 'LineWidth', 1.5);
title('PSO-DBN适应度变化曲线', 'FontSize', 10);
xlabel('迭代次数', 'FontSize', 10);
ylabel('适应度值', 'FontSize', 10);
xlim([1, length(curve)])
grid on
%% 损失函数曲线
figure
plot(1: length(accu), accu, 'r-', 'LineWidth', 1)
xlabel('迭代次数')
ylabel('准确率')
legend('训练集正确率')
title ('训练集正确率曲线')
xlim([1, length(accu)])
grid
figure
plot(1 : length(loss), loss, 'b-', 'LineWidth', 1)
xlabel('迭代次数')
ylabel('损失函数')
legend('训练集损失值')
title ('训练集损失函数曲线')
xlim([1, length(loss)])
grid
%% 绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', 'PSO-DBN预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['准确率=' num2str(error1) '%']};
title(string)
grid
figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值', 'PSO-DBN预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['准确率=' num2str(error2) '%']};
title(string)
grid
%% 混淆矩阵
if flag_conusion == 1
figure
cm = confusionchart(T_train, T_sim1);
cm.Title = 'Confusion Matrix for Train Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
figure
cm = confusionchart(T_test, T_sim2);
cm.Title = 'Confusion Matrix for Test Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Matlab实现PSO-DBN粒子群优化深度置信网络多特征输入分类预测(完整源码和数据) Matlab实现PSO-DBN粒子群优化深度置信网络多特征输入分类预测(完整源码和数据) 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。 粒子群优化学习率、隐藏层单元数和迭代次数。
资源推荐
资源详情
资源评论
收起资源包目录
分类预测:PSO-DBN.zip (28个子文件)
PSO-DBN多特征分类
getObjValue.m 3KB
Toolbox
tanh_opt.m 87B
initialization.m 456B
nnapplygrads.m 736B
dbntrain.m 286B
softmax.m 151B
rbmtrain.m 1KB
nnsetup.m 2KB
nnff.m 2KB
nnpredict.m 172B
rbmdown.m 119B
sigm.m 63B
nnbp.m 2KB
sigmrnd.m 98B
dbnunfoldtonn.m 342B
rbmup.m 123B
dbnsetup.m 600B
nntrain.m 2KB
PSO-DBNC1.png 29KB
main.m 5KB
PSO-DBNC4.png 35KB
数据集.xlsx 73KB
PSO.m 2KB
PSO-DBNC5.png 38KB
PSO-DBNC7.png 36KB
PSO-DBNC3.png 30KB
PSO-DBNC2.png 30KB
PSO-DBNC6.png 34KB
共 28 条
- 1
资源评论
- 禾珏2023-08-14资源值得借鉴的内容很多,那就浅学一下吧,值得下载!
- kugua5272024-05-05资源有很好的参考价值,总算找到了自己需要的资源啦。
机器学习之心
- 粉丝: 1w+
- 资源: 698
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功