Advertisement
ASP_Volume2 Databases/ Data Access/ DAO/ ADO #37956

Predictor

This source code was originally to predict lightning strikes. This source code is run in MATLAB and can be modified for different no of inputs. Meaning, this source code can be used for any kind of prediction!

AI

AI Summary: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

Source Code
original-source
%Hidden Layer - Gaussian Activation Function
%Input and Output Layers - Linear
%MaxDataNo = No. of Years x 24
%Open and read file
disp(' ');
file=input('Please enter path of data file:', 's');
fid=fopen(file,'rt');
[DataArray]=fscanf(fid,'%d');
x=max(DataArray);
DataArray=DataArray/x;
DataArray2=DataArray;
%Initialization
InputUnitNo=24;
HiddenUnitNo=10;
OutputUnitNo=1;
MaxDataNo=120;
MaxPatternNo=MaxDataNo-InputUnitNo;
Eta=0.2;
Alpha=0.2;
Error=0.13;
Epoch=0;
RMSError=1;
%Weights
bias_k=rand(OutputUnitNo,1);
dbias_k=0;
bias_j=rand(HiddenUnitNo,1);
dbias_j=0;
vji=rand(HiddenUnitNo,InputUnitNo);
dvji=0;
wkj=rand(OutputUnitNo,HiddenUnitNo);
dwkj=0;
while RMSError>Error,
  if Epoch>1000,
   break;
  else
   
   for i=1:MaxPatternNo,
     %Start to learn
     Input=DataArray2(i:i+23);
     Target=DataArray(i+24);
     
     %Count netj
     netj=bias_j+vji*Input;
     
     %Gaussian
     HiddenOutput=exp(-(netj.^2));
     %Count netk
     netk=bias_k+wkj*HiddenOutput;
     Output=netk;
     
     %Correction Term
     delk=(Target-Output);
     delj=((-2*(netj.')*HiddenOutput)*(delk*wkj).');
     
     %Update Weights
     dwkj=Eta*delk*(HiddenOutput.')+Alpha*dwkj;
     dvji=Eta*delj*(Input.')+Alpha*dvji;
     wkj=wkj+dwkj;
     vji=vji+dvji;
     
     %Update Biases
     dbias_k=Eta*delk+Alpha*dbias_k;
     dbias_j=Eta*delj+Alpha*dbias_j;
     bias_k=bias_k+dbias_k;
     bias_j=bias_j+dbias_j;
     
     %Calculating Error Function
     ErrorFunc(i)=((Target-Output).^2);
     
     %Update Data Array with Output Value
     DataArray2(i+24)=Output;
     
   end
   RMSError=0.5*sum(ErrorFunc)
   Epoch=Epoch+1
  end
  
end
%Close Data File
fclose(fid);
disp('Weights are saved in C:\My Documents by default');
%Save Weights
fid2=fopen('C:\My Documents\Wkj.txt','wt');
fprintf(fid2,'%1.4f\n',wkj);
fclose(fid2);
fid3=fopen('C:\My Documents\Vji.txt','wt');
fprintf(fid3,'%1.4f\n',vji);
fclose(fid3);
%Save Biases
fid4=fopen('C:\My Documents\Biask.txt','wt');
fprintf(fid4,'%1.4f\n',bias_k);
fclose(fid4);
fid5=fopen('C:\My Documents\Biasj.txt','wt');
fprintf(fid5,'%1.4f\n',bias_j);
fclose(fid5);
DataArray=x*DataArray;
DataArray2=x*DataArray2;
Error=abs(DataArray-DataArray2);
i=0:MaxDataNo-1;
subplot(2,1,1);
hold on
plot(i,DataArray2(1:MaxDataNo),'m-.');
plot(i,DataArray(1:MaxDataNo));
subplot(2,1,2);
plot(i,Error(1:MaxDataNo),'g');
==================
%Recall Phase
%Load Data,Weights and Biases
disp(' ');
file=input('Please enter path of data file:', 's');
fid=fopen(file,'rt');
[DataArray]=fscanf(fid, '%d');
x=max(DataArray);
DataArray=DataArray/x;
fclose(fid);
disp(' ');
file=input('Please enter path of wkj file:', 's');
fid=fopen(file,'rt');
[readwkj]=fscanf(fid,'%f')
fclose(fid);
disp(' ');
file=input('Please enter path of vji file:', 's');
fid=fopen(file,'rt');
[readvji]=fscanf(fid,'%f');
fclose(fid);
disp(' ');
file=input('Please enter path of bias_k file:', 's');
fid=fopen(file,'rt');
[readbias_k]=fscanf(fid,'%f');
fclose(fid);
disp(' ');
file=input('Please enter in path of bias_j file:', 's');
fid=fopen(file,'rt');
[readbias_j]=fscanf(fid,'%f');
fclose(fid);
%Initialization
InputUnitNo=24;
HiddenUnitNo=10;
OutputUnitNo=1;
MaxDataNo=144;
MaxPatternNo=MaxDataNo-InputUnitNo;
PredictionDataNo=24;
DataArray2=[DataArray(1:MaxDataNo-PredictionDataNo);zeros(PredictionDataNo,1)];
%Initialize biases and weights
bias_j=readbias_j;
wkj=readwkj.';
bias_k=readbias_k;
%Convert vji to matrix
vji=readvji(1:HiddenUnitNo);
for i=11:10:InputUnitNo*HiddenUnitNo-9,
  vji=[vji,readvji(i:i+9)];
end

for i=1:MaxPatternNo,
  Input=DataArray2(i:i+23);
  %Count netj
  netj=bias_j+vji*Input;
  
  %Gaussian
  HiddenOutput=exp(-(netj.^2));
  
  %Count netk
  netk=bias_k+wkj*HiddenOutput;
  Output=abs(netk);  
  %Update Data Array with Output Value
  DataArray2(i+24)=Output;
   
end
DataArray2=DataArray2*x;
DataArray=DataArray*x;
i=0:MaxDataNo-1;
hold on
plot(i,DataArray2,'m-.');
plot(i,DataArray);
Error=abs(DataArray-DataArray2);
i=0:MaxDataNo-1;
subplot(2,1,1);
hold on
plot(i,DataArray2(1:MaxDataNo),'m-.');
plot(i,DataArray(1:MaxDataNo));
subplot(2,1,2);
plot(i,Error(1:MaxDataNo),'g');
title('Recall Phase using weights with RMS Error = 0.1163')
Original Comments (3)
Recovered from Wayback Machine