用小波神经网络来对时间序列进行预测由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“小波神经网络预测”。
/* Note:Your choice is C IDE */ #include “stdio.h” void main(){
}/*用小波神经网络来对时间序列进行预测 */ /*%File name : nprogram.m %Description : This file reads the data from %its source into their respective matrices prior to % performing wavelet decomposition.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Clear command screen and variables */ clc;clear;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % user desired resolution level(Tested: resolution = 2 is best)*/ level = menu('Enter desired resolution level: ', '1',...'2(Select this for testing)', '3', '4');switch level case 1, resolution = 1;case 2, resolution = 2;case 3, resolution = 3;case 4, resolution = 4;end
msg = ['Resolution level to be used is ', num2str(resolution)];disp(msg);
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % user desired amount of data to use */ data = menu('Choose amount of data to use: ', '1 day', '2 days', '3 days', '4 days',...'5 days', '6 days', '1 week(Select this for testing)');switch data case 1, dataPoints = 48;/*%1 day = 48 points */ case 2, dataPoints = 96;/* %2 days = 96 points */ case 3, dataPoints = 144;/*%3 days = 144 points */
case 4, dataPoints = 192;/*%4 days = 192 points */ case 5, dataPoints = 240;/* %5 days = 240 points */ case 6, dataPoints = 288;/* %6 days = 288 points */ case 7, dataPoints = 336;/*%1 weeks = 336 points */
end
msg = ['No.of data points to be used is ', num2str(dataPoints)];disp(msg);
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Menu for data set selection */ select = menu('Use QLD data of: ', 'Jan02',...'Feb02', 'Mar02(Select this for testing)', 'Apr02', 'May02');switch select case 1, demandFile = 'DATA200601_QLD1';
case 2, demandFile = 'DATA200602_QLD1';
case 3, demandFile = 'DATA200603_QLD1';
case 4, demandFile = 'DATA200604_QLD1';
case 5, demandFile = 'DATA200605_QLD1';end
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Reading the historical DEMAND data into tDemandArray */ selectedDemandFile=[demandFile,'.csv'];[regionArray, sDateArray, tDemandArray, rrpArray, pTypeArray]...= textread(selectedDemandFile, '%s %q %f %f %s', 'headerlines', 1, 'delimiter', ',');
/*%Display no.of points in the selected time series demand data */ [demandDataPoints, y] = size(tDemandArray);msg = ['The no.of points in the selected Demand data is ', num2str(demandDataPoints)];disp(msg);
/*%Decompose historical demand data signal */ [dD, l] = swtmat(tDemandArray, resolution, 'db2');approx = dD(resolution, :);
/*%Plot the original demand data signal */ figure(1);subplot(resolution + 2, 1, 1);plot(tDemandArray(1: dataPoints))legend('Demand original');title('QLD Demand Data Signal');
/*%Plot the approximation demand data signal */ for i = 1 : resolution subplot(resolution + 2, 1, i + 1);plot(approx(1: dataPoints))legend('Demand Approximation');end
/*%After displaying approximation signal, display detail x */ for i = 1: resolution if(i > 1)detail(i, :)= dD(i-1, :)-dD(i, :);else
detail(i, :)= tDemandArray'i + 3);plot(detail(i, 1: dataPoints))legendName = ['Demand Detail ', num2str(i)];legend(legendName);
else
subplot(resolution + 2, 1, resolutiondP(1, :);end
if i == 1 [B,A]=butter(1,0.65,'low');result =filter(B,A, detailP(i, 1: dataPoints));
subplot(resolution + 3, 1, resolutioni + 3);plot(detailP(i, 2: dataPoints))legendName = ['Price Detail ', num2str(i)];legend(legendName);
else
subplot(resolution + 3, 1, resolution1)];end disp(neuralNetwork);disp(' ');
/*%Set no.of input nodes and hidden neurons for the %respective demand and price coefficient signal */ numOfInputs = 2;inputValue = ['Number of neural network INPUT units is set at ', num2str(numOfInputs)];disp(inputValue);disp(' ');numOfOutput = 1;outValue = ['Output is set to ', num2str(numOfOutput)];disp(outValue);disp(' ');numOfHiddens = input('Enter the no.of HIDDEN units for the NN hidden : ');hiddenValue = ['Number of neural network HIDDEN units is set at ', num2str(numOfHiddens)];disp(hiddenValue);disp(' ');/*%Setting no.of training examples */ trainingLength = dataPoints;
/* %Set target outputs of the training examples */ if(x == 1)targetDemand = normDemand(targetStartAt: 1 + trainingLength);else
targetDemand = normDemandDetail(x1, y + 1);inputs(2, y + 1)= normPriceDetail(x1, y + 1);propData(2, y + 1)= normPriceDetail(x1)predicted(1: pointsAhead))./ actualDemand;msg = ['Mean Absolute Error = ', num2str(mean(AbsError(1: pointsAhead))), '!'];disp(' ');disp(msg);
/*%Plot actual time series against predicted result */ figure(3)actualWithPredicted(:, 1)= actualDemand;actualWithPredicted(:, 2)= predicted(1: pointsAhead);plot(actualWithPredicted);graph = ['Mean Absolute Error = ', num2str(mean(AbsError))];title(graph);legend('Actual', 'Forecasted');
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%File name : nretrain.m %Description : This file loads the existing NNs and trains them again.*/ clc;/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Prompt for the starting point for training */ disp('Program will now RETRAIN the Neural Networks ')disp('with the SAME intial data series again...');disp(' ');disp('To capture the pattern of the signal, the model is ')disp('set to accept dataPoints x 2 sets of training examples;');disp('1 set of demand + 1 sets of price.');disp(' ');disp('The normalised demand data , is to be taken as the ')disp('output value for the first iteration of training examples.');disp(' ');msg = ['Data points to be used for reTraining the NNs is from 1 to ',...num2str(dataPoints)];disp(msg);disp(' ');disp('Pre ENTER key to continue...');pause;
/*%Clear command screen */ clc;
/*%Prompt for no.of training cycles %For current program, 1 cycle = user set no.of iterations(ie: dataPoints)*/ cycle = input('Input number of cycles to retrain the NNs: ');
numOfTimes = resolution + 1;/*%Loading existing NNs for training */ for x = 1: numOfTimes
/*%Re-initialising variables */ clear targetDemand;clear inputs;clear output;clc;
/*%Loading NN for the respective demand and temperature coefficient signals */
filename = ['nn', num2str(x)];clear nn load(filename);
/*%Getting the size of NN*/ numOfInputs = nn.nin;numOfHiddens = nn.nhidden;numOfOutput = 1;/*%Setting length of reTraining examples and target outputs */ reTrainLength = dataPoints;targetLength = reTrainLength;
targetStartAt = 2;
/*%Set target outputs of the training examples */
if(x == 1)targetDemand = normDemand(targetStartAt: 1 + targetLength);else
targetDemand = normDemandDetail(x1, y + 1);inputs(2, y + 1)= normPriceDetail(x-1, y + 1);
end
output(y + 1, :)= targetDemand(y + 1);
y = y + 1;end
inputs =(inputs');
/*%Setting no.of training cycles */
[ni, np] = size(targetDemand);/*%
/*%NN options */ options = zeros(1, 18);options(1)= 1;%Provides display of error values options(14)= cycle * ni * np;
/*%Training the neural network %netopt(net, options, x, t, alg);*/
nn = netopt(nn, options, inputs, output, 'scg');
/*%Save the neural network */ filename = ['nn', num2str(x)];save(filename, 'nn');
disp(' ');msg = ['Neural network => ', filename, '
disp(msg);
if(x
disp(' ');disp('Model is now ready to forecast again!');disp(' ');disp('Pre ENTER key to continue...');end
pause;end