📄 checkauc.m
字号:
%plot ROC train
figure, hold on,
Y0=[];
Y1=[];
for i=1:length(ttrn)
if sign(ttrn(i)) <= 0
Y0=[Y0;ytrn(i)];
else
Y1=[Y1;ytrn(i)];
end
end
[TN1,TP1,FP1,FN1,auc_trn,se1,tb1]=roc_tf(Y0,Y1,'b');
%plot ROC test
Y0=[];
Y1=[];
for i=1:length(ttst)
if sign(ttst(i)) <= 0
Y0=[Y0;ytst(i)];
else
Y1=[Y1;ytst(i)];
end
end
[TN2,TP2,FP2,FN2,auc_tst,se2,tb2]=roc_tf(Y0,Y1,'r');
box; hold off,
disp(['AUC training: ', num2str(auc_trn),'; se: ', num2str(se1)]),
disp(['AUC test: ', num2str(auc_tst),'; se: ', num2str(se2)]),
%return,
% compute misclassification error
sttrn=ttrn; sttst=ttst;
sttrn(find(sttrn<=0))=-1; sttst(find(sttst<=0))=-1;
% default threshold as b obtained from lssvm
disp('====== before bias adjusting ======'),
TPtrn=length(find(sign(ytrn)==sttrn&ttrn>0));
TNtrn=length(find(sign(ytrn)==sttrn&ttrn<=0));
FPtrn=length(find(sign(ytrn)~=sttrn&ttrn<=0));
FNtrn=length(find(sign(ytrn)~=sttrn&ttrn>0));
TPtst=length(find(sign(ytst)==sttst&ttst>0));
TNtst=length(find(sign(ytst)==sttst&ttst<=0));
FPtst=length(find(sign(ytst)~=sttst&ttst<=0));
FNtst=length(find(sign(ytst)~=sttst&ttst>0));
disp(['training #misclassify : ', num2str(FPtrn+FNtrn),'; accuracy: ', num2str((TPtrn+TNtrn)/length(ttrn))]),
disp([' FP: ', num2str(FPtrn), '; FN: ', num2str(FNtrn), ...
' ; Sensitivity: ',num2str(TPtrn/(TPtrn+FNtrn)), ' ; Specificity:',num2str(TNtrn/(TNtrn+FPtrn))]),
disp(['test: #misclassify : ', num2str(FPtst+FNtst),'; accuracy: ', num2str((TPtst+TNtst)/length(ttst))]),
disp([' FP: ', num2str(FPtst), '; FN: ', num2str(FNtst), ...
' ; Sensitivity: ',num2str(TPtst/(TPtst+FNtst)), ' ; Specificity:',num2str(TNtst/(TNtst+FPtst))]),
%return
% search the threshold which minimize the misclassification erro on training set
ytrn_ord=sort(ytrn); ytrn_cut=[];
tn=zeros(length(ttrn),1); tp=tn; fn=tn; fp=tn; err=tn;
for i=1:length(ttrn),
for j=1:length(ttrn),
if i<length(ttrn),
ytrn_cut(i)=mean(ytrn_ord(i:i+1));
else
ytrn_cut(i)=ytrn_ord(i);
end
if ttrn(j)<=0,
if ytrn(j)<=ytrn_cut(i),
tn(i)=tn(i)+1;
else
fp(i)=fp(i)+1; err(i)=err(i)+1;
end
else
if ytrn(j)>ytrn_cut(i),
tp(i)=tp(i)+1;
else
fn(i)=fn(i)+1; err(i)=err(i)+1;
end,
end,
end,
end,
figure, plot(ytrn_cut, err),
[errmin, idx]=min(err);
cutoff=mean(ytrn_cut(idx));
disp(['err minimized : ', num2str(errmin), ' cutoff: ' ,num2str(cutoff)])
tN=0; fN=0; tP=0; fP=0; errGen=0;
for i=1:length(ttst),
if ttst(i)<=0,
if ytst(i)<=cutoff,
tN=tN+1;
else
fP=fP+1; errGen=errGen+1;
end
else
if ytst(i)>cutoff,
tP=tP+1;
else
fN=fN+1; errGen=errGen+1;
end,
end,
end,
disp('====== After bias adjusting ======'),
disp(['training #misclassify : ', num2str(errmin),'; accuracy: ', num2str(1-errmin/length(ttrn))]),
disp([' FP: ', num2str(fp(idx)), '; FN: ', num2str(fn(idx)), ...
' ; Sensitivity: ',num2str(tp(idx)/(tp(idx)+fn(idx))), ' ; Specificity:',num2str(tn(idx)/(tn(idx)+fp(idx)))]),
disp(['test: #misclassify : ', num2str(errGen),'; accuracy: ', num2str(1-errGen/length(ttst))]),
disp([' FP: ', num2str(fP), '; FN: ', num2str(fN), ...
' ; Sensitivity: ',num2str(tP/(tP+fN)), ' ; Specificity:',num2str(tN/(tN+fP))]),
clear sttrn sttst,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -