%% I. 清空环境变量
%% PCA-BILSTM
%% I. 清空环境变量
clear all
clc
close all
%% 导入数据
X = xlsread('inputd');
Y = xlsread('outputd');
%% PCA主成分降维
[Z,MU,SIGMA]=zscore(X);
%% 计算相关系数矩阵
Sx=cov(Z); % 相关系数矩阵计算
%% 计算相关系数矩阵的特征值特征向量
[V,D] = eig(Sx); %计算相关系数矩阵的特征向量及特征值
eigValue = diag(D); %将特征值提取为列向量
[eigValue,IX]=sort(eigValue,'descend');%特征值降序排序
eigVector=V(:,IX); %根据排序结果,特征向量排序
C=sort(eigValue,'descend'); %特征值进行降序排序
rat1=C./sum(C) %求出排序后的特征值贡献率
rat2=cumsum(C)./sum(C) %求出排序后的累计贡献率
result1(1,:) = {'特征值','贡献率','累计贡献率'}; %细胞矩阵1第一行标题
result1(2:(length(D)+1),1) = num2cell(C); %将特征值放到第一列
result1(2:(length(D)+1),2) = num2cell(rat1); %将贡献率放到第二列
result1(2:(length(D)+1),3) = num2cell(rat2) %将累计贡放到第三列
%% 特征向量的归一化处理
norm_eigVector=sqrt(sum(eigVector.^2));%特征向量进行归一化处理
eigVector=eigVector./repmat(norm_eigVector,size(eigVector,1),1);
%% 判断贡献率
%根据贡献率达到85%故选择
d=5;% 这块根据实际情况修改
%% 数据降维处理
eigVector=eigVector(:,1:d); %求出对应特征向量
Y1=X*eigVector; %处理样本和向量相乘获得降维数据
%% 赋值为原始X
X=Y1;
%% 导入数据
%训练集—
% temp = randperm(size(X,1));%1代表多少行,2代表多少列
%训练集—
P_train= X(1:190,:)';%冒号代表取出来是整行或者整列,'代表转置
P_test = X(191:end,:)';
M = size(P_train,2);
% 测试集—
T_train= Y(1:190,:)';
T_test = Y(191:end,:)';
N = size(T_test,2);
%% 主成分分析
k = 5; %主成分设置
%% 数据归一化
[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);
%% BiLSTM 层设置,参数设置
inputSize = size(p_train,1); %数据输入x的特征维度
outputSize = size(t_train,1); %数据输出y的维度
numhidden_units=50;
%% bilstm
layers = [ ...
sequenceInputLayer(inputSize) %输入层设置
bilstmLayer(numhidden_units,'name','hidden1') %学习层设置(cell层)
dropoutLayer(0.3,'name','dropout_1')
fullyConnectedLayer(outputSize) % 全连接层设置(影响输出维度)
regressionLayer('name','out')];
%% trainoption(bilstm)
opts = trainingOptions('adam', ...
'MaxEpochs',500, ...
'MiniBatchSize',8, ...
'GradientThreshold',1,...
'InitialLearnRate',0.01, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',10, ... % epoch后学习率更新
'LearnRateDropFactor',0.8, ...
'Verbose',0, ...
'Plots','training-progress'...
);
%% BiLSTM网络训练
BiLSTMnet = trainNetwork(p_train ,t_train ,layers,opts);
[BiLSTMnet,YPredtr_train]= predictAndUpdateState(BiLSTMnet,p_train);
T_sim1 = mapminmax('reverse',YPredtr_train,ps_output);
%% BiLSTM测试数据
%%
%网络测试输出
[BiLSTMnet,YPred_test] = predictAndUpdateState(BiLSTMnet,p_test);
%网络输出反归一化
T_sim2= mapminmax('reverse',YPred_test,ps_output);
%% 训练集误差评价
%% 测试集结果
T_sim2 = double(T_sim2) ;
figure;
plotregression(T_test,T_sim2,['回归图']);
figure;
ploterrhist(T_test-T_sim2,['误差直方图']);
%% 均方根误差 RMSE
error1 = sqrt(sum((T_sim1 - T_train).^2)./M);
error2 = sqrt(sum((T_test - T_sim2).^2)./N);
%%
%决定系数
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;
%%
%均方误差 MSE
mse1 = sum((T_sim1 - T_train).^2)./M;
mse2 = sum((T_sim2 - T_test).^2)./N;
%%
%RPD 剩余预测残差
SE1=std(T_sim1-T_train);
RPD1=std(T_train)/SE1;
SE=std(T_sim2-T_test);
RPD2=std(T_test)/SE;
%% 平均绝对误差MAE
MAE1 = mean(abs(T_train - T_sim1));
MAE2 = mean(abs(T_test - T_sim2));
%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((T_train - T_sim1)./T_train));
MAPE2 = mean(abs((T_test - T_sim2)./T_test));
%% 训练集绘图
figure
%plot(1:M,T_train,'r-*',1:M,T_sim1,'b-o','LineWidth',1)
plot(1:M,T_train,'r-*',1:M,T_sim1,'b-o','LineWidth',1.5)
legend('真实值','PCA-BiLSTM预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'训练集预测结果对比';['(R^2 =' num2str(R1) ' RMSE= ' num2str(error1) ' MSE= ' num2str(mse1) ' RPD= ' num2str(RPD1) ')' ]};
title(string)
%% 预测集绘图
figure
plot(1:N,T_test,'r-*',1:N,T_sim2,'b-o','LineWidth',1.5)
legend('真实值','PCA-BiLSTM预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'测试集预测结果对比';['(R^2 =' num2str(R2) ' RMSE= ' num2str(error2) ' MSE= ' num2str(mse2) ' RPD= ' num2str(RPD2) ')']};
title(string)
%% 测试集误差图
figure
ERROR3=T_test-T_sim2;
plot(T_test-T_sim2,'b-*','LineWidth',1.5)
xlabel('测试集样本编号')
ylabel('预测误差')
title('测试集预测误差')
grid on;
legend('PCA-BiLSTM预测值预测输出误差')
%% 绘制线性拟合图
%% 训练集拟合效果图
figure
plot(T_train,T_sim1,'*r');
xlabel('真实值')
ylabel('预测值')
string = {'训练集效果图';['R^2_c=' num2str(R1) ' RMSEC=' num2str(error1) ]};
title(string)
hold on ;h=lsline;
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 预测集拟合效果图
figure
plot(T_test,T_sim2,'ob');
xlabel('真实值')
ylabel('预测值')
string1 = {'测试集效果图';['R^2_p=' num2str(R2) ' RMSEP=' num2str(error2) ]};
title(string1)
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 求平均
R3=(R1+R2)./2;
error3=(error1+error2)./2;
%% 总数据线性预测拟合图
tsim=[T_sim1,T_sim2]';
S=[T_train,T_test]';
figure
plot(S,tsim,'ob');
xlabel('真实值')
ylabel('预测值')
string1 = {'所有样本拟合预测图';['R^2_p=' num2str(R3) ' RMSEP=' num2str(error3) ]};
title(string1)
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 打印出评价指标
disp(['-----------------------误差计算--------------------------'])
disp(['评价结果如下所示:'])
disp(['平均绝对误差MAE为:',num2str(MAE2)])
disp(['均方误差MSE为: ',num2str(mse2)])
disp(['均方根误差RMSEP为: ',num2str(error2)])
disp(['决定系数R^2为: ',num2str(R2)])
disp(['剩余预测残差RPD为: ',num2str(RPD2)])
disp(['平均绝对百分比误差MAPE为: ',num2str(MAPE2)])
grid
%% 贡献率图
figure
bar(rat1);
xlabel('特征');
ylabel('贡献率');
%% 累计贡献率图
figure
bar(rat2);
xlabel('特征');
ylabel('累计贡献率');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于主成分分析-双向长短期记忆网络回归预测,PCA-BILSTM回归预测,多输入单输出的拟合预测。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。 基于主成分分析-双向长短期记忆网络回归预测,PCA-BILSTM回归预测,多输入单输出的拟合预测。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。
资源推荐
资源详情
资源评论
收起资源包目录
5 PCA-BILSTM -2.zip (6个子文件)
PCA_BILSTM.m 6KB
zscore.m 907B
outputd.xlsx 10KB
inputd.xlsx 19KB
子函数(添加到路径)
PCA.m 659B
distanceMatrix.m 313B
共 6 条
- 1
资源评论
- m0_639598452024-02-13发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
智能算法及其模型预测
- 粉丝: 2427
- 资源: 871
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HIVE-14706.01.patch
- C# WInForm IrisSkin2皮肤控件
- svn cleanup 失败怎么办
- Spring Boot集成Spring Security,HTTP请求授权配置:包含匿名访问、允许访问、禁止访问配置
- 易语言-画曲线模块及应用例程
- 电子元件行业知名厂商官网(TI/NXP/ST/Infineon/ADI/Microchip/Qualcomm/Diodes/Panasonic/TDK/TE/Vishay/Molex等)数据样例
- Cytoscape-3-10-0-windows-64bit.exe
- 基于STM32设计的宠物投喂器项目源代码(高分项目).zip
- 机器学习音频训练文件-24年抖音金曲
- 工业以太网无线通信解决方案
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功