function [error,T_sim1,T_sim2]=Transformer(x,p_train, t_train,p_test,T_train , T_test,M,N,NN, ps_output)
outdim = 1; % 最后一列为输出
f_ = NN - outdim; % 输入特征维度
%% 导入数据
% res = xlsread('data.xlsx');
%% 数据分析
% num_size = 0.8; % 训练集占数据集比例
% outdim = 1; % 最后一列为输出
% num_samples = size(res, 1); % 样本个数
% res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
% num_train_s = round(num_size * num_samples); % 训练集样本个数
%
%
% %% 划分训练集和测试集
% P_train = res(1: num_train_s, 1: f_)';
% T_train = res(1: num_train_s, f_ + 1: end)';
% M = size(P_train, 2);
%
% P_test = res(num_train_s + 1: end, 1: f_)';
% T_test = res(num_train_s + 1: end, f_ + 1: end)';
% N = size(P_test, 2);
% %% 数据归一化
% [P_train, ps_input] = mapminmax(P_train, 0, 1);
% P_test = mapminmax('apply', P_test, ps_input);
%
% [t_train, ps_output] = mapminmax(T_train, 0, 1);
% t_test = mapminmax('apply', T_test, ps_output);
%% 数据平铺
% 将数据平铺成1维数据只是一种处理方式
% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
% 但是应该始终和输入层数据结构保持一致
% P_train = double(reshape(P_train, f_, 1, 1, M));
% P_test = double(reshape(P_test , f_, 1, 1, N));
%
% t_train = t_train';
% t_test = t_test' ;
%
% %% 数据格式转换
% for i = 1 : M
% p_train{i, 1} = P_train(:, :, 1, i);
% end
%
% for i = 1 : N
% p_test{i, 1} = P_test( :, :, 1, i);
% end
%% 创建模型
%网络搭建
numChannels = f_;
maxPosition = 256;
numHeads = 4;
numKeyChannels = numHeads*32;
layers = [
sequenceInputLayer(numChannels,Name="input")
positionEmbeddingLayer(numChannels,maxPosition,Name="pos-emb");
additionLayer(2, Name="add")
selfAttentionLayer(numHeads,numKeyChannels,'AttentionMask','causal')
selfAttentionLayer(numHeads,numKeyChannels)
indexing1dLayer("last")
fullyConnectedLayer(1)
regressionLayer];
lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,"input","add/in2");
%% 参数设置
options = trainingOptions('adam', ... % Adam 梯度下降算法
'MaxEpochs', 200, ... % 最大训练次数
'InitialLearnRate', x(1), ... % 初始学习率
'LearnRateSchedule', 'piecewise', ... % 学习率下降
'LearnRateDropFactor', x(2), ... % 学习率下降因子
'LearnRateDropPeriod', 200, ... % 经过训练后 学习率
'Shuffle', 'every-epoch', ... % 每次训练打乱数据集
'Verbose', false);
%% 训练模型
net = trainNetwork(p_train, t_train, lgraph, options);
%% 仿真预测
t_sim1 = predict(net, p_train);
t_sim2 = predict(net, p_test );
%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1', ps_output);
T_sim2 = mapminmax('reverse', t_sim2', ps_output);
% %% 查看网络结构
% analyzeNetwork(net)
%
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
error=(error2+error1)/2
%
% %% 相关指标计算
% % R2
% R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
% R2 = 1 - norm(T_test - T_sim2)^2 / norm(T_test - mean(T_test ))^2;
%
% disp(['训练集数据的R2为:', num2str(R1)])
% disp(['测试集数据的R2为:', num2str(R2)])
%
% % MAE
% mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
% mae2 = sum(abs(T_sim2 - T_test )) ./ N ;
%
% disp(['训练集数据的MAE为:', num2str(mae1)])
% disp(['测试集数据的MAE为:', num2str(mae2)])
%
% %% 平均绝对百分比误差MAPE
% MAPE1 = mean(abs((T_train - T_sim1)./T_train));
% MAPE2 = mean(abs((T_test - T_sim2)./T_test));
%
% disp(['训练集数据的MAPE为:', num2str(MAPE1)])
% disp(['测试集数据的MAPE为:', num2str(MAPE2)])
%
% % MBE
% mbe1 = sum(T_sim1 - T_train) ./ M ;
% mbe2 = sum(T_sim2 - T_test ) ./ N ;
%
% disp(['训练集数据的MBE为:', num2str(mbe1)])
% disp(['测试集数据的MBE为:', num2str(mbe2)])
%
% %均方误差 MSE
% mse1 = sum((T_sim1 - T_train).^2)./M;
% mse2 = sum((T_sim2 - T_test).^2)./N;
%
% disp(['训练集数据的MSE为:', num2str(mse1)])
% disp(['测试集数据的MSE为:', num2str(mse2)])
%
%
% %% 绘图
% figure
% plot(T_sim1,'-p','Color',[255 0 0]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','b')
% hold on
% plot(T_train,'-^','Color',[50 50 50]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','r')
% legend('预测值','真实值')
% xlabel('预测样本')
% ylabel('预测结果')
% string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
% title(string)
% xlim([1, M])
% grid
% ax=gca;hold on
% % -------------------------------------------------------------------------
% % 坐标区域修饰
% ax.XLabel.FontWeight='bold';
% ax.YLabel.FontWeight='bold';
% % 设置轴线粗细和刻度朝外
% ax.LineWidth=1;
% ax.TickDir='out';
% %% 训练集误差图
% figure
% bar((T_sim1 - T_train)./T_train)
% legend('模型训练集相对误差','Location','NorthEast','FontName','楷体')
% title('模型训练集相对误差','fontsize',12,'FontName','楷体')
% ylabel('误差','fontsize',12,'FontName','楷体')
% xlabel('样本','fontsize',12,'FontName','楷体')
% xlim([1 M]);
%
% figure
% plot(T_sim2,'-p','Color',[255 0 0]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','b')
% hold on
% plot(T_test,'-^','Color',[50 50 50]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','r')
% legend('预测值','真实值')
% xlabel('预测样本')
% ylabel('预测结果')
% string = {'测试集预测结果对比'; ['RMSE=' num2str(error2)]};
% title(string)
% xlim([1, N])
% grid
% ax=gca;hold on
% % -------------------------------------------------------------------------
% % 坐标区域修饰
% ax.XLabel.FontWeight='bold';
% ax.YLabel.FontWeight='bold';
% % 设置轴线粗细和刻度朝外
% ax.LineWidth=1;
% ax.TickDir='out';
% %% 测试集误差图
% figure
% bar((T_sim2 - T_test )./T_test)
% legend('模型测试集相对误差','Location','NorthEast','FontName','楷体')
% title('模型测试集相对误差','fontsize',12,'FontName','楷体')
% ylabel('误差','fontsize',12,'FontName','楷体')
% xlabel('样本','fontsize',12,'FontName','楷体')
% xlim([1 N]);
%
% %% 绘制线性拟合图
% %% 训练集拟合效果图
% figure
% plot(T_train,T_sim1,'s','Markersize',2);
% xlabel('真实值')
% ylabel('预测值')
% string = {'训练集效果图';['R^2_c=' num2str(R1) ' RMSEC=' num2str(error1) ]};
% title(string)
% hold on ;h=lsline;
% set(h,'LineWidth',2,'LineStyle','-','Color',[1 1 0])
% %% 预测集拟合效果图
% figure
% plot(T_test,T_sim2,'s','Markersize',2);
% xlabel('真实值')
% ylabel('预测值')
% string1 = {'测试集效果图';['R^2_p=' num2str(R2) ' RMSEP=' num2str(error2) ]};
% title(string1)
% hold on ;h=lsline();
% set(h,'LineWidth',2,'LineStyle','-','Color',[1 1 0])
没有合适的资源?快使用搜索试试~ 我知道了~
基于蜣螂算法优化DBO-Transformer实现光伏数据回归预测附matlab代码 标准.rar
共14个文件
png:7个
m:6个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 101 浏览量
2024-08-14
23:48:16
上传
评论 1
收藏 255KB RAR 举报
温馨提示
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
资源推荐
资源详情
资源评论
收起资源包目录
【Transformer回归预测】基于蜣螂算法优化DBO-Transformer实现光伏数据回归预测附matlab代码 标准.rar (14个子文件)
【Transformer回归预测】基于蜣螂算法优化DBO-Transformer实现光伏数据回归预测附matlab代码 标准
calc_error.m 2KB
Bounds.m 209B
initialization.m 313B
Transformer.m 7KB
3.png 47KB
main.m 6KB
1.png 61KB
11.png 13KB
6.png 18KB
5.png 21KB
4.png 15KB
data.xlsx 66KB
DBO.m 5KB
2.png 17KB
共 14 条
- 1
资源评论
matlab科研助手
- 粉丝: 3w+
- 资源: 5985
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java毕设项目:基于spring+mybatis+maven+mysql实现的企业财务管理系统【含源码+数据库+开题报告+毕业论文+答辩PPT】
- Sigrity Power SI 仿真分析教程与实例分析.rar
- Java毕设项目:基于spring+mybatis+maven+mysql实现的海鲜自助餐厅管理系统【含源码+数据库+毕业论文】
- Java毕设项目:基于spring+mybatis+maven+mysql实现的端游账号销售管理系统分前后台【含源码+数据库+毕业论文】
- Emby Docker镜像-4.8.8版本
- Java毕设项目:基于spring+mybatis+maven+mysql实现的校园代购服务订单管理系统分前后台【含源码+数据库+毕业论文】
- MySQL Docker镜像-v9.0.0
- 金铲铲S13双城之战自动拿牌助手2.0
- postgres Docker镜像-v16.4
- zookeeper Docker镜像-v3.9.2
- nvdiffrast frpc-linux-amd64
- sonarqube Docker镜像-v9.9.5-developer
- 华为AP无线接入控制器学习资料
- 毕设238912734017234
- adminer Docker镜像-v4.8.1
- 恒温加热台外壳3d打印件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功