function [TrainingTime, TestingTime, TestingAccuracy] = ELM(TrainingData_File, TestingData_File, NumberofHiddenNeurons, ActivationFunction)
%%%%%%%%%%% 导入训练数据
train_data=TrainingData_File;
T=train_data(:,1)';
P=train_data(:,2:size(train_data,2))';
clear train_data;
%%%%%%%%%%% 导入测试数据
test_data=TestingData_File;
TV.T=test_data(:,1)';
TV.P=test_data(:,2:size(test_data,2))';
clear test_data;
NumberofTrainingData=size(P,2);
NumberofTestingData=size(TV.P,2);
NumberofInputNeurons=size(P,1);
%%%%%%%%%%% 计算输入权值与偏置
start_time_train=cputime;
%%%%%%%%%%% 随机生成输入权值
InputWeight=rand(NumberofHiddenNeurons,NumberofInputNeurons)*2-1;
BiasofHiddenNeurons=rand(NumberofHiddenNeurons,1);
tempH=InputWeight*P;
clear P;%清除P
ind=ones(1,NumberofTrainingData);
BiasMatrix=BiasofHiddenNeurons(:,ind);
tempH=tempH+BiasMatrix;
%%%%%%%%%%% 计算隐层节点输出矩阵H
switch lower(ActivationFunction)%%激活函数
case {'sig','sigmoid'}
%%%%%%%% Sigmoid
H = 1 ./ (1 + exp(-tempH));
case {'sin','sine'}
%%%%%%%% Sine
H = sin(tempH);
case {'hardlim'}
%%%%%%%% Hard Limit
H = double(hardlim(tempH));
case {'tribas'}
%%%%%%%% Triangular basis function
H = tribas(tempH);
case {'radbas'}
%%%%%%%% Radial basis function
H = radbas(tempH);
end
clear tempH;
%%%%%%%%%%%计算输出权值
OutputWeight=pinv(H') * T';
end_time_train=cputime;
TrainingTime=end_time_train-start_time_train %%训练时间
%%%%%%%%%%% 计算训练精度
Y=(H' * OutputWeight)'; %%训练实际输出
TrainingAccuracy=sqrt(mse(T - Y))
clear H;
%%%%%%%%%%% 计算测试输出
start_time_test=cputime;
tempH_test=InputWeight*TV.P;
clear TV.P;
ind=ones(1,NumberofTestingData);
BiasMatrix=BiasofHiddenNeurons(:,ind);
tempH_test=tempH_test + BiasMatrix;
switch lower(ActivationFunction)
case {'sig','sigmoid'}
%%%%%%%% Sigmoid
H_test = 1 ./ (1 + exp(-tempH_test));
case {'sin','sine'}
%%%%%%%% Sine
H_test = sin(tempH_test);
case {'hardlim'}
%%%%%%%% Hard Limit
H_test = hardlim(tempH_test);
case {'tribas'}
%%%%%%%% Triangular basis function
H_test = tribas(tempH_test);
case {'radbas'}
%%%%%%%% Radial basis function
H_test = radbas(tempH_test);
%%%%%%%% More activation functions can be added here
end
TY=(H_test' * OutputWeight)'; % TY: 实际测试输出
end_time_test=cputime;
TestingTime=end_time_test-start_time_test % 测试时间
TestingAccuracy=sqrt(mse(TV.T - TY)) % 测试精度
figure;%%作图
x=1:size(TV.T',1);
plot(x,TY,'r-',x,TV.T,'b-')
legend("预测值","实际值")
- 1
- 2
- 3
前往页