轉(zhuǎn)載自:http://blog.csdn.net/pb09013037/article/details/48949037
因個(gè)人在做模式識(shí)別相關(guān)的工作,模式識(shí)別算法最終的性能評(píng)價(jià)是關(guān)鍵。但苦于網(wǎng)上很難找到具體、詳細(xì)的評(píng)價(jià)流程、方法以及代碼,所以本人打算近期準(zhǔn)備如題所示評(píng)價(jià)方法的整理工作,到時(shí)候會(huì)奉上方法介紹、基礎(chǔ)代碼(matlab 版),以幫助更多像我這樣對(duì)這些方法有些迷茫的人。
暫時(shí)提供matlab中自帶的ROC,DET曲線繪制函數(shù): perfcurve()
具體使用方法,中文鏈接:http://ilovematlab.cn/thread-76781-1-1.html
MathWork Manual(文檔源自matlab2013。之前低版本中應(yīng)該有該函數(shù),但本人在自己的2008a版本中沒有發(fā)現(xiàn),2010版本中應(yīng)該有):?http://www.mathworks.cn/cn/help/stats/perfcurve.html
自編 ROC 曲線及相關(guān)中間結(jié)果的計(jì)算代碼。
Main function:
[plain]?view plaincopy %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?? %function:?ROC?curve?related?? %???date?:?2013.07.01?? %?author?:?Xin?Yang,?School?of?medicine,?SZU?? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?? ?? %?根據(jù)Label8score文件繪制?ROC、DET曲線?? %?獲取數(shù)據(jù)文件路徑?? [filename,?pathname]?=?uigetfile(?{'*.txt',?'Model?Files?(*.txt)';?...?? '*.*',?'All?Files?(*.*)'},?'選擇?ROC?數(shù)據(jù)源','F:\Result\FPPW\');?? if?isequal(filename,0)?||?isequal(pathname,0)?? ????return;%如果點(diǎn)了“取消”?? else?? ????L8S_file?=?[pathname?,?filename];?? end?? dot_num?=?50;?? YX_Roc(L8S_file?,?dot_num);?? %?YX_DET_Curve(L8S_file?,?dot_num);??
YX_Roc function:
[plain]?view plaincopy %?根據(jù)?標(biāo)記&預(yù)測(cè)得分文件?繪制ROC曲線?? function?YX_Roc(Label8ScoreFile?,?dot_num)?? %?加載?標(biāo)記&預(yù)測(cè)得分?數(shù)據(jù)文件??1:正?0:負(fù)?? Mat_L8S?=?load(Label8ScoreFile);?? sample_num?=?size(Mat_L8S?,1);?? %?繪制正、負(fù)標(biāo)記分布趨勢(shì)圖,用于觀察正負(fù)樣本的交叉程度?? Plot_PN_pdf(Mat_L8S);?? ?? Label?=?Mat_L8S(:,1);%?人工標(biāo)記?? Score?=?Mat_L8S(:,2);%?算法評(píng)分?? %?分?jǐn)?shù)上下限?? Upper?=?max(Score);?? Lower?=?min(Score);?? %?拓寬分?jǐn)?shù)上下限,便于達(dá)到極限?? Upper?=?Upper?+?0.1;?? Lower?=?Lower?-?0.1;?? %?點(diǎn)數(shù)?? bins?=?dot_num;?? %?步進(jìn)?? step?=?(Upper?-?Lower)/bins;?? %?閾值變化?? T?=?Lower:step:Upper;?? T_num?=?bins?+?1;?? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?? %?計(jì)算?TPR?、FPR?? TPR?=?zeros(T_num?,1);?? FPR?=?zeros(T_num?,1);?? %?遍歷閾值?? for?i?=?1:T_num?? ????T_temp?=?T(i);?? ????TP?=?0?;?FN?=?0;%?清零?? ????FP?=?0?;?TN?=?0;?? ????%?遍歷樣本?? ????for?j?=?1:sample_num?? ????????if?(Label(j)?==?1)?? ????????????if?(Score(j)?>=?T_temp)?? ????????????????TP?=?TP?+?1;%?真陽(yáng)?? ????????????else?? ????????????????FN?=?FN?+?1;%?假陰?? ????????????end?? ????????elseif?(Label(j)?==?0)?? ????????????if?(Score(j)?>=?T_temp)?? ????????????????FP?=?FP?+?1;%?假陽(yáng)?? ????????????else?? ????????????????TN?=?TN?+?1;%?真陰?? ????????????end?? ????????end?? ????end?? ????%?*****?? ????TPR(i)?=?TP/(TP?+?FN);?? ????FPR(i)?=?FP/(FP?+?TN);?? end?? %?ROC?曲線?? figure?? plot(FPR?,?TPR?,?'c',?'LineWidth',2);?? axis([0?,1?,0?,1]);?? xlabel('1-Specificity')?? ylabel('Sensitivity')?? title('ROC')?? grid?on?? %?Youden?指數(shù)?? figure?? X?=?TPR-FPR;?? plot(X?,'r','LineWidth',2);?? title('Youden?指數(shù)');?? %?TPR、FPR?隨閾值的變化,便于觀察、確定閾值?? figure?,plot3(FPR?,?TPR?,?T?,'Color'?,?'r'?,'LineWidth',2);?? xlabel('\fontsize{14}\bfX軸?--?FPR')?? ylabel('\fontsize{14}\bfY軸?--?TPR')?? zlabel('\fontsize{14}\bfZ軸?--?Threshold')?? title('\fontsize{14}\bf閾值選取')??
Plot_PN_pdf function :?
[plain]?view plaincopy %?根據(jù)?Label2Score?繪制正、負(fù)標(biāo)記的概率密度函數(shù)曲線?? function?Plot_PN_pdf(Mat_label2score)?? ?? [La_P_r?,?La_P_c]?=?find(Mat_label2score(:,1)?==?1);?? [La_N_r?,?La_N_c]?=?find(Mat_label2score(:,1)?==?0);?? ?? P_Score?=?Mat_label2score(La_P_r?,?2);?? N_Score?=?Mat_label2score(La_N_r?,?2);?? ?? [P_Count?,?P_bin]?=?hist(P_Score?,?50);?? [N_Count?,?N_bin]?=?hist(N_Score?,?50);?? P_Count?=?(P_Count?-?min(P_Count))/(max(P_Count)?-?min(P_Count));?? N_Count?=?(N_Count?-?min(N_Count))/(max(N_Count)?-?min(N_Count));?? ?? figure??? values?=?spcrv([[P_bin(1)?P_bin?P_bin(end)];[P_Count(1)?P_Count?P_Count(end)]],3);?? plot(values(1,:),values(2,:),'Color'?,?'r'?,'LineWidth',2);?? hold?on??? values?=?spcrv([[N_bin(1)?N_bin?N_bin(end)];[N_Count(1)?N_Count?N_Count(end)]],3);?? plot(values(1,:),values(2,:),'Color'?,?'b'?,'LineWidth',2);?? legend('\fontsize{14}\it??P-Labeled','\fontsize{14}\it??N-Labeled')?? xlabel('\fontsize{14}\bfScore')?? ylabel('\fontsize{14}\bffrequency')?? title('\fontsize{14}\bf正、負(fù)標(biāo)記分布曲線')??
?
中間結(jié)果:
??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(1) ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(2)
??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(3)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(4)
(1)圖刻畫了正負(fù)測(cè)試數(shù)據(jù)的預(yù)測(cè)得分分布(概率密度函數(shù)),并表明了正負(fù)測(cè)試樣本得分的交叉程度。交叉程度由兩者曲線下的交叉部分的積分,即面積決定。交叉越多,則表明分類器效果越差,反之,效果越好。
(2)圖則是ROC曲線,越靠近左上角,分類器性能越好。
(3)圖則是ROC曲線應(yīng)用時(shí),選取實(shí)際應(yīng)用閾值的參考方法之一:Youden指數(shù)。曲線最高點(diǎn)對(duì)應(yīng)的閾值為最好的應(yīng)用閾值。Youden指數(shù)可參考如下文章第6頁(yè):http://www.medicalbiostatistics.com/roccurve.pdf
(4)圖是基于ROC,選取閾值的曲線。X, Y分別為假陽(yáng)率、真陽(yáng)率,Z軸則是相應(yīng)的閾值。要始終記住的是,ROC曲線的產(chǎn)生,就是因?yàn)橐蚤撝底鳛樽兞?#xff0c;在不同閾值下,得到的多組真陽(yáng)、假陽(yáng)率點(diǎn)繪制而來的ROC曲線。所以ROC曲線上的任何一個(gè)點(diǎn),都是有對(duì)應(yīng)的閾值的。繪制ROC曲線的目的,除了直觀的看到分類器性能,另一個(gè)重要作用就是,根據(jù)ROC曲線,選取一個(gè)合理的閾值,用于實(shí)際檢測(cè)、應(yīng)用、判定。
另附兩篇個(gè)人覺得很有用的博文鏈接,是關(guān)于ROC和Precision-Recall的講解的:
[1]?http://www.zhizhihu.com/html/y2012/4076.html
[2]?http://blog.csdn.net/abcjennifer/article/details/7834256
//=============== 28-Aug-2015 增加==================//
目標(biāo)檢測(cè)中另外常用的評(píng)價(jià)標(biāo)準(zhǔn)則是FPPW和FPPI,詳細(xì)應(yīng)用可以參考這篇文章:
Pedestrian detection: A?benchmark
兩者都側(cè)重考察FP(False Positive)出現(xiàn)的頻率。
FPPW (False Positive per Window)
基本含義:給定一定數(shù)目N的負(fù)樣本圖像,分類器將負(fù)樣本判定為“正”的次數(shù)FP,其比率FP/N即為FPPW。意義與ROC中的假陽(yáng)率相同。FPPW中,一張圖就是一個(gè)樣本。
FPPI (False Positive per Image)
基本含義:給定一定數(shù)目N的樣本集,內(nèi)含N張圖像,每張圖像內(nèi)包含或不包含檢測(cè)目標(biāo)。
每張圖像均需要標(biāo)定:
1.包含目標(biāo)的個(gè)數(shù);
2. 目標(biāo)的準(zhǔn)確位置L。
而后在每張圖像上運(yùn)行分類器,檢測(cè)目標(biāo)并得到位置p。然后,檢查每張圖像內(nèi)的檢測(cè)結(jié)果是否“擊中”標(biāo)定的目標(biāo):
a. 若圖像內(nèi)無目標(biāo),而分類器給出了n個(gè)“目標(biāo)”檢測(cè)結(jié)果,那么False Positive 次數(shù) +n;
b. 若圖像內(nèi)有目標(biāo),則判斷p是否擊中L,判斷標(biāo)準(zhǔn)參看上述文章(主要看p與L的重疊率)。若判斷未擊中,則False Positive 次數(shù) +1。
最后 FPPI = (False Positive 次數(shù))/N。
FPPI 相比于FPPW來說,更接近于分類器的實(shí)際應(yīng)用情況。
?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的模式识别的评价方法:ROC曲线, DET曲线, FPPW, FPPI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。