📄 makemodel.m
字号:
function [PercCorrTrain,PercCorrTest,BestMLK,MLKP] = MakeModel(Nval,PercentageTrain,MLKP);
%
% set cputimer
Tbegin=cputime;
%
% set model and training parameters
if (nargin == 2)
MLKP=SetParamsModel;
end
%
% load original data set
load(MLKP.DataFile);
%
% exclusion for an unsupervised Kohonen map (single run)
if (upper(MLKP.ProblemType) == 'MAP')
[Xtr,ScaleParX] = ScaleData(Xtr, MLKP.ScaleTypeX);
[BestMLK]= TrainMap(Xtr,[],MLKP);
if (upper(MLKP.ScaleBack) == 'Y')
[BestMLKXMap] = BackScaleData(BestMLK.XMap', MLKP.ScaleTypeX, ScaleParX)';
[BestMLK.Xtr] = BackScaleData(BestMLK.Xtr, MLKP.ScaleTypeX, ScaleParX);
end
PercCorrTrain=0;
PercCorrTest=0;
% read out cputimer
Tend=cputime;
Message=sprintf('Total time %g seconds',Tend-Tbegin);
disp(Message);
return;
end
%
% start crossvalidation
for ival=1:Nval
%
% make a (balanced) division in training and test sets
if (upper(MLKP.DataSet) == 'MAKE' )
[Xtr,Ytr,Xtest,Ytest] = MakeBalancedSet(X,Y,PercentageTrain,MLKP);
end
%
% for a permutation test, randomize Ytr and Ytest
if (upper(MLKP.PermutationTest) == 'Y')
[NobjTrain,Nvar] = size(Ytr);
[NobjTest,Nvar] = size(Ytest);
Ytr=Ytr(randperm(NobjTrain),:);
Ytest=Ytest(randperm(NobjTest),:);
end
%
% scale if necessary the original or generated data sets
if (upper(MLKP.DataSet) == 'MAKE' | (upper(MLKP.DataSet) == 'ORIG' & ival == 1))
[NewXtr,ScaleParX] = ScaleData(Xtr, MLKP.ScaleTypeX);
Xtr=NewXtr;
[NewXtest] = ReScaleData(Xtest,MLKP.ScaleTypeX,ScaleParX);
Xtest=NewXtest;
[NewYtr,ScaleParY] = ScaleData(Ytr, MLKP.ScaleTypeY);
Ytr=NewYtr;
[NewYtest] = ReScaleData(Ytest,MLKP.ScaleTypeY,ScaleParY);
Ytest=NewYtest;
if (upper(MLKP.KernelTransformation) == 'Y')
[Ktr,Ktest]=MakeKernel(Xtr,Xtest,MLKP);
Xtr=Ktr;
Xtest=Ktest;
clear Ktr Ktest
end
end
%
% start the modelling
if (upper(MLKP.ProblemType) == 'CLS')
%
% calculate confusion tables, overall performance and best model
[MLK]= TrainClassReg(Xtr,Ytr,Xtest,Ytest,MLKP);
PercCorrTrain(ival)=MLK.PercCorrTrain;
PercCorrTest(ival)=MLK.PercCorrTest;
else
%
% calculate RMSEC, RMSEP values, overall performance and best model
[MLK]=TrainClassReg(Xtr,Ytr,Xtest,Ytest,MLKP);
PercCorrTrain(ival)=MLK.RmseTrainAll;
PercCorrTest(ival)=MLK.RmseTestAll;
end
BestMLK(ival)=MLK;
%
% rescale 'best' mappings
if (upper(MLKP.ScaleBack) == 'Y')
[XMap] = BackScaleData(BestMLK(ival).XMap', MLKP.ScaleTypeX, ScaleParX);
[Xtr] = BackScaleData(BestMLK(ival).Xtr, MLKP.ScaleTypeX, ScaleParX);
[Xtest] = BackScaleData(BestMLK(ival).Xtest, MLKP.ScaleTypeX, ScaleParX);
BestMLK(ival).XMap=XMap';
BestMLK(ival).Xtr=Xtr;
BestMLK(ival).Xtest=Xtest;
[YMap] = BackScaleData(BestMLK(ival).YMap', MLKP.ScaleTypeY, ScaleParY);
[Ytr] = BackScaleData(BestMLK(ival).Ytr, MLKP.ScaleTypeY, ScaleParY);
[Ytest] = BackScaleData(BestMLK(ival).Ytest, MLKP.ScaleTypeY, ScaleParY);
BestMLK(ival).YMap=YMap';
BestMLK(ival).Ytr=Ytr;
BestMLK(ival).Ytest=Ytest;
end
end
%
% return overall results of modelling procedure
MeanPCTrain=mean(PercCorrTrain);
StdPCTrain=std(PercCorrTrain);
MeanPCTest=mean(PercCorrTest);
StdPCTest=std(PercCorrTest);
if (upper(MLKP.SilentMode) == 'N')
Message=sprintf('\nResult with %s',MLKP.TrainingMethod);
disp(Message);
Message=sprintf('Training: Mean %g Stddev %g', MeanPCTrain, StdPCTrain);
disp(Message);
Message=sprintf('Test: Mean %g Stddev %g', MeanPCTest, StdPCTest);
disp(Message);
%
% read out cputimer
Tend=cputime;
Message=sprintf('Total time %g seconds',Tend-Tbegin);
disp(Message);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -