📄 somplsvalmodel.m
字号:
function [PCTrain,PCTest,NBestMLK,NMLKP] = SOMPLSValModel(BestMLK,MLKP,OPT)
global p1 p2
MLKP.TrainingMethod='PLS';
MLKP.DataFile='Temp/tempfile';
MLKP.DataSet='Orig';
MLKP.ScaleTypeX = 'Raw';
MLKP.ScaleTypeY = 'Raw';
MLKP.ScaleBack = 'N';
MLKP.SilentMode='Y';
MLKP.LatentVar=OPT.LV;
if (upper(MLKP.ProcMode) == 'XMAP')
XMap=BestMLK.XMap;
elseif (upper(MLKP.ProcMode) == 'KPLS')
XMap=BestMLK.Xtr';
end
ScaleFact=max(max(dist(BestMLK.Xtr,BestMLK.Xtr')));
XMap=XMap/ScaleFact;
Xtr=BestMLK.Xtr/ScaleFact;
Xtest=BestMLK.Xtest/ScaleFact;
Ytr=BestMLK.Ytr;
Ytest=BestMLK.Ytest;
if (upper(OPT.DistTypeX) == 'COR')
Xtr=(OPT.B0+Xtr*XMap).^OPT.Power;
Xtest=(OPT.B0+Xtest*XMap).^OPT.Power;
elseif (upper(OPT.DistTypeX) == 'EUC')
Xtr=(OPT.B0+dist(Xtr,XMap)).^OPT.Power;
Xtest=(OPT.B0+dist(Xtest,XMap)).^OPT.Power;
elseif (upper(OPT.DistTypeX) == 'RBF')
Xtr=exp(-(dist(Xtr,XMap).^2)/(2*OPT.Sigma^2));
Xtest=exp(-(dist(Xtest,XMap).^2)/(2*OPT.Sigma^2));
elseif (upper(OPT.DistTypeX) == 'PUK')
p1=OPT.Sigma;
p2=OPT.Omega;
[NobjTrain,NvarX]=size(Xtr);
[NobjTest,NvarX]=size(Xtest);
[NvarX,Nunit]=size(XMap);
for jobj=1:Nunit
for iobj=1:NobjTrain
Ktr(iobj,jobj)=svkernel('puk',Xtr(iobj,:),XMap(:,jobj)');
end
for iobj=1:NobjTest
Ktest(iobj,jobj)=svkernel('puk',Xtest(iobj,:),XMap(:,jobj)');
end
end
Xtr=Ktr;
Xtest=Ktest;
end
save Temp/tempfile Xtr Xtest Ytr Ytest
[PCTrain,PCTest,NBestMLK,NMLKP] = MakeModel(1,0,MLKP);
PercCorrTrain=PCTrain;
PercCorrTest=PCTest;
Message=sprintf('\nValidation result with %s with %d LVs',...
MLKP.TrainingMethod,OPT.LV);
disp(Message);
if (upper(OPT.DistTypeX) == 'PUK')
Message=sprintf('Optimised parameters - Similarity: %s, Sigma %g, Omega %g',...
OPT.DistTypeX, OPT.Sigma, OPT.Omega);
elseif (upper(OPT.DistTypeX) == 'RBF')
Message=sprintf('Optimised parameters - Similarity: %s, Sigma %g',...
OPT.DistTypeX, OPT.Sigma);
else
Message=sprintf('Optimised parameters - Similarity: %s, Power: %d, B0: %d',...
OPT.DistTypeX, OPT.Power, OPT.B0);
end
disp(Message);
if (upper(MLKP.ProblemType) == 'CLS')
Message=sprintf('Training: Percentage correct %g', PercCorrTrain);
disp(Message);
Message=sprintf('Test: Percentage correct %g\n', PercCorrTest);
disp(Message);
else
[Nobjects,NvarY]=size(Ytr);
for ivar=1:NvarY
Message=sprintf('Training: RMSE %g Corr %g',...
NBestMLK.RmseTrain(ivar),NBestMLK.CorrTrain(ivar));
disp(Message);
Message=sprintf('Test: RMSE %g Corr %g\n',...
NBestMLK.RmseTest(ivar),NBestMLK.CorrTest(ivar));
disp(Message);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -