日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模式识别的评价方法:ROC曲线, DET曲线, FPPW, FPPI

發布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模式识别的评价方法:ROC曲线, DET曲线, FPPW, FPPI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:http://blog.csdn.net/pb09013037/article/details/48949037

因個人在做模式識別相關的工作,模式識別算法最終的性能評價是關鍵。但苦于網上很難找到具體、詳細的評價流程、方法以及代碼,所以本人打算近期準備如題所示評價方法的整理工作,到時候會奉上方法介紹、基礎代碼(matlab 版),以幫助更多像我這樣對這些方法有些迷茫的人。

暫時提供matlab中自帶的ROC,DET曲線繪制函數: perfcurve()

具體使用方法,中文鏈接:http://ilovematlab.cn/thread-76781-1-1.html

MathWork Manual(文檔源自matlab2013。之前低版本中應該有該函數,但本人在自己的2008a版本中沒有發現,2010版本中應該有):?http://www.mathworks.cn/cn/help/stats/perfcurve.html


自編 ROC 曲線及相關中間結果的計算代碼。

Main function:

[plain]?view plaincopy
  • %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%??
  • %function:?ROC?curve?related??
  • %???date?:?2013.07.01??
  • %?author?:?Xin?Yang,?School?of?medicine,?SZU??
  • %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%??
  • ??
  • %?根據Label8score文件繪制?ROC、DET曲線??
  • %?獲取數據文件路徑??
  • [filename,?pathname]?=?uigetfile(?{'*.txt',?'Model?Files?(*.txt)';?...??
  • '*.*',?'All?Files?(*.*)'},?'選擇?ROC?數據源','F:\Result\FPPW\');??
  • if?isequal(filename,0)?||?isequal(pathname,0)??
  • ????return;%如果點了“取消”??
  • 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
  • %?根據?標記&預測得分文件?繪制ROC曲線??
  • function?YX_Roc(Label8ScoreFile?,?dot_num)??
  • %?加載?標記&預測得分?數據文件??1:正?0:負??
  • Mat_L8S?=?load(Label8ScoreFile);??
  • sample_num?=?size(Mat_L8S?,1);??
  • %?繪制正、負標記分布趨勢圖,用于觀察正負樣本的交叉程度??
  • Plot_PN_pdf(Mat_L8S);??
  • ??
  • Label?=?Mat_L8S(:,1);%?人工標記??
  • Score?=?Mat_L8S(:,2);%?算法評分??
  • %?分數上下限??
  • Upper?=?max(Score);??
  • Lower?=?min(Score);??
  • %?拓寬分數上下限,便于達到極限??
  • Upper?=?Upper?+?0.1;??
  • Lower?=?Lower?-?0.1;??
  • %?點數??
  • bins?=?dot_num;??
  • %?步進??
  • step?=?(Upper?-?Lower)/bins;??
  • %?閾值變化??
  • T?=?Lower:step:Upper;??
  • T_num?=?bins?+?1;??
  • %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%??
  • %?計算?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;%?真陽??
  • ????????????else??
  • ????????????????FN?=?FN?+?1;%?假陰??
  • ????????????end??
  • ????????elseif?(Label(j)?==?0)??
  • ????????????if?(Score(j)?>=?T_temp)??
  • ????????????????FP?=?FP?+?1;%?假陽??
  • ????????????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?指數??
  • figure??
  • X?=?TPR-FPR;??
  • plot(X?,'r','LineWidth',2);??
  • title('Youden?指數');??
  • %?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
  • %?根據?Label2Score?繪制正、負標記的概率密度函數曲線??
  • 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正、負標記分布曲線')??

  • ?

    中間結果:

    ??

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(1) ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(2)

    ??

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(3)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(4)

    (1)圖刻畫了正負測試數據的預測得分分布(概率密度函數),并表明了正負測試樣本得分的交叉程度。交叉程度由兩者曲線下的交叉部分的積分,即面積決定。交叉越多,則表明分類器效果越差,反之,效果越好。

    (2)圖則是ROC曲線,越靠近左上角,分類器性能越好。

    (3)圖則是ROC曲線應用時,選取實際應用閾值的參考方法之一:Youden指數。曲線最高點對應的閾值為最好的應用閾值。Youden指數可參考如下文章第6頁:http://www.medicalbiostatistics.com/roccurve.pdf

    (4)圖是基于ROC,選取閾值的曲線。X, Y分別為假陽率、真陽率,Z軸則是相應的閾值。要始終記住的是,ROC曲線的產生,就是因為以閾值作為變量,在不同閾值下,得到的多組真陽、假陽率點繪制而來的ROC曲線。所以ROC曲線上的任何一個點,都是有對應的閾值的。繪制ROC曲線的目的,除了直觀的看到分類器性能,另一個重要作用就是,根據ROC曲線,選取一個合理的閾值,用于實際檢測、應用、判定。


    另附兩篇個人覺得很有用的博文鏈接,是關于ROC和Precision-Recall的講解的:

    [1]?http://www.zhizhihu.com/html/y2012/4076.html

    [2]?http://blog.csdn.net/abcjennifer/article/details/7834256


    //=============== 28-Aug-2015 增加==================//

    目標檢測中另外常用的評價標準則是FPPW和FPPI,詳細應用可以參考這篇文章:

    Pedestrian detection: A?benchmark


    兩者都側重考察FP(False Positive)出現的頻率。

    FPPW (False Positive per Window)

    基本含義:給定一定數目N的負樣本圖像,分類器將負樣本判定為“正”的次數FP,其比率FP/N即為FPPW。意義與ROC中的假陽率相同。FPPW中,一張圖就是一個樣本。

    FPPI (False Positive per Image)

    基本含義:給定一定數目N的樣本集,內含N張圖像,每張圖像內包含或不包含檢測目標。

    每張圖像均需要標定:

    1.包含目標的個數;

    2. 目標的準確位置L。

    而后在每張圖像上運行分類器,檢測目標并得到位置p。然后,檢查每張圖像內的檢測結果是否“擊中”標定的目標:

    a. 若圖像內無目標,而分類器給出了n個“目標”檢測結果,那么False Positive 次數 +n;

    b. 若圖像內有目標,則判斷p是否擊中L,判斷標準參看上述文章(主要看p與L的重疊率)。若判斷未擊中,則False Positive 次數 +1。

    最后 FPPI = (False Positive 次數)/N。

    FPPI 相比于FPPW來說,更接近于分類器的實際應用情況。

    ?

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的模式识别的评价方法:ROC曲线, DET曲线, FPPW, FPPI的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。