tic;%计时开始
%% 本程序用于煤炭产能预测,所属回归预测类
clear all
close all
clc
format compact
%% 加载数据
data=xlsread('数据1.xls');
inpu=data(:,1:12)';%输入
outpu = data(:,end)';%输出
%% 归一化
[input,~]=mapminmax(inpu,0,1);
[output,outputns]=mapminmax(outpu,0,1);
input=input';
output=output';
%% 划分数据集
%打乱样本 随机抽取300组作为训练样本,剩下130组作为测试样本
[m n ]=sort(rand(1,430));
P=input(n(1:300),:); %训练输入
T=output(n(1:300));
P_test=input(n(301:430),:);%测试输入
T_test=output(n(301:430));
clear data m n input output
%% 训练样本构造,分块,批量
numcases=100;%每块数据集的样本个数
numdims=size(P,2);%单个样本的大小
numbatches=3;%将300组训练样本,分成3批,每一批100组
% 训练数据
for i=1:numbatches
train=P((i-1)*numcases+1:i*numcases,:);
batchdata(:,:,i)=train;
end%将分好的10组数据都放在batchdata中
%% 2.训练RBM
%% rbm参数
maxepoch=20;%训练rbm的次数
numhid=100; numpen=50; numpen2=30;%dbn隐含层的节点数
disp('构建一个3层的深度置信网络DBN用于特征提取');
%% 无监督预训练
fprintf(1,'Pretraining Layer 1 with RBM: %d-%d ',numdims,numhid);
restart=1;
rbm1;%使用cd-k训练rbm,注意此rbm的可视层不是二值的,而隐含层是二值的
vishid1=vishid;hidrecbiases=hidbiases;
fprintf(1,'\nPretraining Layer 2 with RBM: %d-%d ',numhid,numpen);
batchdata=batchposhidprobs;%将第一个RBM的隐含层的输出作为第二个RBM 的输入
numhid=numpen;%将numpen的值赋给numhid,作为第二个rbm隐含层的节点数
restart=1;
rbm1;
hidpen=vishid; penrecbiases=hidbiases; hidgenbiases=visbiases;
fprintf(1,'\nPretraining Layer 3 with RBM: %d-%d\n ',numpen,numpen2);%200-100
batchdata=batchposhidprobs;%显然,将第二哥RBM的输出作为第三个RBM的输入
numhid=numpen2;%第三个隐含层的节点数
restart=1;
rbm1;
hidpen2=vishid; penrecbiases2=hidbiases; hidgenbiases2=visbiases;
%%%% 将预训练好的RBM用于初始化DBN权重%%%%%%%%%
w1=[vishid1; hidrecbiases]; %12-100
w2=[hidpen; penrecbiases]; %100-50
w3=[hidpen2; penrecbiases2];%50-30
%% 有监督回归层训练
%===========================训练过程=====================================%
%==========DBN无监督用于提取特征,需要加上有监督的回归层==================%
%由于含有偏执,所以实际数据应该包含一列全为1的数,即w0x0+w1x1+..+wnxn 其中x0为1的向量 w0为偏置b
N1 = length(P);
digitdata = [P ones(N1,1)];
w1probs = 1./(1 + exp(-digitdata*w1));
w1probs = [w1probs ones(N1,1)];
w2probs = 1./(1 + exp(-w1probs*w2));
w2probs = [w2probs ones(N1,1)];
w3probs = 1./(1 + exp(-w2probs*w3));
H = w3probs';
nn=size(T,2);
T=T';
lamda=inf;%正则化系数
OutputWeight=pinv(H'+1/lamda) *T';%加入正则化系数lamda,lamda=inf就是没有正则化
Y=(H' * OutputWeight)';
%%%%%%%%%% 计算训练误差,不重要,看看图就行
% 反归一化
T=mapminmax('reverse',T,outputns);
Y=mapminmax('reverse',Y,outputns);
figure
plot(T,'r-*')
hold on
plot(Y,'bo-')
legend('期望输出','实际输出')
firstline = '训练阶段';
secondline = '实际输出与理想输出的结果对照';
title({firstline;secondline},'Fontsize',12);
xlabel('训练样本数')
%===========================测试过程=====================================%
%=======================================================================%
N2 = size(P_test,1);
w1=[vishid1; hidrecbiases];
w2=[hidpen; penrecbiases];
w3=[hidpen2; penrecbiases2];
test = [P_test ones(N2,1)];
%激活函数是常用的sigmoid时,也可以换成其他函数,甚至每层的都可以不一样
w1probs = 1./(1 + exp(-test*w1));
w1probs = [w1probs ones(N2,1)];
w2probs = 1./(1 + exp(-w1probs*w2));
w2probs = [w2probs ones(N2,1)];
w3probs = 1./(1 + exp(-w2probs*w3));
H1 = w3probs';
TY=(H1' * OutputWeight)'; % TY: the actual output of the testing data
% 反归一化
T_test=mapminmax('reverse',T_test',outputns);
TY=mapminmax('reverse',TY,outputns);
%%%%%%%%%% 计算测试结果
result=[TY;T_test];
error=TY-T_test;
fprintf('测试集输出结果分析\n');
fprintf('均方误差MSE\n');
MSE=mse(error)
fprintf('平均绝对误差MAE\n');
MAE=mean(abs(TY-mean(T_test)))
% fprintf('平均相对误差MRE\n');
% MRE=mean(abs(TY-mean(T_test))./T_test); %不能计算平均相对误差,因为相对误差=绝对误差/真实值,而你真实值里面有0
% fprintf('不能计算平均相对误差,因为相对误差=绝对误差/真实值,而你真实值里面有0\n');
fprintf('R2决定系数\n');
N = length(T_test);
R2 = (N*sum(TY.*T_test)-sum(TY)*sum(T_test))^2/((N*sum((TY).^2)-(sum(TY))^2)*(N*sum((T_test).^2)-(sum(T_test))^2))
fprintf('相关系数\n');
a=corrcoef(TY,T_test);%皮尔逊相关系数
corrcoeff=a(1,2)
t=toc %计时结束
figure
plot(T_test,'r-*')
hold on
plot(TY,'bo-')
firstline = '测试阶段';
secondline = '实际输出与理想输出的结果对照';
title({firstline;secondline},'Fontsize',12);
xlabel('测试样本数')
ylabel('煤炭产量')
legend('期望输出','实际输出')
基于深度信息神经网络DBN的矿石产量预测,基于DBN的矿石产量预测
版权申诉
5星 · 超过95%的资源 96 浏览量
2023-08-06
14:30:05
上传
评论 2
收藏 61KB RAR 举报
神经网络机器学习智能算法画图绘图
- 粉丝: 2442
- 资源: 599
最新资源
- TG-2024-05-23-204718255.mp4
- 候志强@181 5428 8938_20240420112107.amr
- spispispispispi
- 实验二:IP协议分析.zip
- 驱动代码驱动代码驱动代码驱动代码
- SVID_20240523_141155_1.mp4
- Code for the complete guide to tkinter tutorial
- 关于百货中心供应链管理系统.zip
- SimpleFolderIcon-master 修改Unity的Project下的文件夹图标
- A python Tkinter widget to display tile based maps
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈