实验3 分类器性能度量
一、实验目的
(1)理解分类器性能度量的方法。
(2)编程ROC曲线绘制。
二、实验内容
1、编程实现ROC曲线绘制的函数roc_plot。其中,分类概率使用matlab自带的朴素贝叶斯函数得到。
测试代码如下:
load('testingData.mat')
load('trainingData.mat')
nb = NaiveBayes.fit(trAttr, trLabels);
p=posterior (nb,tstAttr);
y1=p(:,2);
[auc1 ,FPR1 ,TPR1 ] = roc_plot(y1,tstLabels);
(将执行正确的roc_plot函数代码粘贴在此处,核心代码要求有注释)
function [auc1 ,FPR1 ,TPR1 ] = roc_plot(y1,tstLabels)
[val,ind]=sort(y1);
roc_y=tstLabels(ind);
num=length(roc_y);
fpr=zeros(num,1);
tpr=zeros(num,1);
for i=1:num
p=sum(roc_y(:)==1);%实际上为真的数目
n=sum(roc_y(:)==0);%实际上位假的数目
fp=sum(roc_y(i:end)==0);%被分为真实际上是假的数目
tp=sum(roc_y(i:end)==1);%被分为真实际上市真的数目
fpr(i)=fp/p;
tpr(i)=tp/n;
end
tpr=[tpr;0];
fpr=[fpr;0];
auc=0;
for i=2:num+1
auc=auc+tpr(i)*(fpr(i-1)-fpr(i));%计算AUC
end
figure,plot(fpr,tpr);
xlabel('false Positive Rate');
ylabel('True Positive Rate');
title(['ROC curve(AUC=)' num2str(auc) ')']);
end
2、(难度2)编程实现ROC曲线绘制的函数roc_plot。其中,分类概率使用自己编写的朴素贝叶斯函数bys_post1得到。
测试代码如下:
load('testingData.mat')
load('trainingData.mat')
[post4all]=bys_post1(trAttr, trLabels,tstAttr);
y2=post4all(:,2);
[auc2 ,FPR2 ,TPR2 ] = roc_plot(y2,tstLabels);
(将执行正确的bys_post1函数代码粘贴在此处,核心代码要求有注释)
function [auc ,fpr ,tpr ] = roc_plot(y1,tstLabels)
[val,ind]=sort(y1);
roc_y=tstLabels(ind);
num=length(roc_y);
fpr=zeros(num,1);
tpr=zeros(num,1);
for i=1:num
p=sum(roc_y(:)==1);%ʵ¼ÊÉÏΪÕæµÄÊýÄ¿
n=sum(roc_y(:)==0);%ʵ¼ÊÉÏλ¼ÙµÄÊýÄ¿
fp=sum(roc_y(i:end)==0);%±»•ÖΪÕæʵ¼ÊÉÏÊǼٵÄÊýÄ¿
tp=sum(roc_y(i:end)==1);%±»•ÖΪÕæʵ¼ÊÉÏÊÐÕæµÄÊýÄ¿
fpr(i)=fp/p;
tpr(i)=tp/n;
end
tpr=[tpr;0];
fpr=[fpr;0];
auc=0;
for i=2:num+1
auc=auc+tpr(i)*(fpr(i-1)-fpr(i));%¼ÆËãAUC
end
figure,plot(fpr,tpr);
xlabel('false Positive Rate');
ylabel('True Positive Rate');
title(['ROC curve(AUC=)' num2str(auc) ')']);
end