📄 crossvalid.m
字号:
function [opts,E]=crossvalid(ds,Z,nu,kfold,method,task,trueZ,pamopt)
% searching optimal one by k-fold cross-validataion
% method: GcLearn epsilon-SVR or linear regress; task: 'find_nu' or not
% trueZ: 'zcurve'-- testing with Zcurve; 'zvalue'-- with true values of Z
k=0;
random_times=0;
[nl,nx]=size(ds);
bx=setdiff(1:nx,Z);
dcurve=ds;
dcurve(:,nx+1)=ds(:,Z);
[dtrain,dtest]=datatraintest(ds,random_times,kfold);
for i=nu
k=k+1;
if task=='find_nu'
[dcurve(:,1:nx),dx,v,vend]=datageometrize(ds,i,0);
end
for j=1:kfold % 3-fold cross-validataion
Xlabel=dtrain{j};
S=dcurve(Xlabel,:);
Ylabel=dtest{j};
T=dcurve(Ylabel,:);
if trueZ=='zvalue'
Target=T(:,nx+1); % true data of Z for test
if k==2 & method=='observe'
S(:,Z)=S(:,nx+1); end % training by true data of Z
elseif trueZ=='zcurve'
Target=T(:,Z); % using curve data of Z for test
end
if method=='gclearn'
v=[v;v(length(v))+1];
[h,pp,ph,id]=sumcurve(dx,v,vend,'each');
np=size(pp,1);
region{1}=[1 1 0 0 np];
coef=modeloutframe(v,region{1},h,pp,ph,id,Z,'allcoef');
b=find(coef~=0);
b=setdiff(b,Z);
Z_hat=T(:,b)*coef(b)'+coef(Z);
residual=Target-Z_hat;
p(j)=(norm(residual)^2)/size(T,1);
elseif method=='epsilsv'
model = svmtrain(S(:,Z), S(:,bx), pamopt);
[Q,R] = svmpredictnoprint(Target, T(:,bx), model);
p(j)=R(2);
end
end
if k==1
opts=i;
E=mean(p);
elseif mean(p)<=0.98*E
opts=i;
E=mean(p);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -