⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makemodel.m

📁 有监督自组织映射-偏最小二乘算法(A supervised self-organising map–partial least squares algorithm),可以用语多变量数据的回归分析
💻 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 + -