Re: [問題] Precision-Recall curve

看板DataScience作者 (小刀會序曲)時間5年前 (2019/05/18 12:43), 編輯推噓1(1013)
留言14則, 3人參與, 5年前最新討論串3/3 (看更多)
※ 引述《sxy67230 (charlesgg)》之銘言: : ※ 引述《disney82231 (小刀會序曲)》之銘言: : : 一般在二元分類下,我們可以用ROC下面積(即AUC)來判斷模型好壞 : : 但當資料不平衡情況下時,通常是畫Precision-Recall curve : : 但是Precision-Recall curve有辦法計算出類似AUC的東西嗎? : : 如果沒有辦法,單純用PR curve是不是無法比較模型好壞? : : 我的認知是PR curve會根據不同的指標分數跟資料而有不同的形狀 : : 所以沒有辦法計算出曲面下面積 : : 這樣的想法是對的嗎? : : 謝謝 : 工程上的解釋: : ROC在不平衡類上,TPR主要的影響就是正例,FPR則是負例,所以ROC本質上就是一個相對 : 曲線的評估方法,所以其實正負例增加的分佈下,0.5的threshold在座標上也是相對移動 : ,所以ROC很好判斷模型好壞標準,高於0.5就可以說他不錯。那我們求取他的AUC呢?其 : 實物理意義就是我隨機抽取一個正負例,正確判斷出正例的機率。 : PR在Recall跟Precision都是受到正例影響,所以本身就很容易受到不平衡的影響,如果 : 今天不平衡類有變動,那你的評估threshold在PR上就會不同。那如果求取PR的AUC意義又 : 跟ROC不太相同了,因為Recall跟Percision都是正例,所以意義就是你每次取正例正確被 : 分類的機率,就是平均精確度(AP)。 : 數學上AP的公式就是 : https://i.imgur.com/d2kytp9.jpg
: P就是Precision,r就是Recall,所以本質意義就是你對所有Recall的Percision做積分, : 那不就是你PR curve求AUC嗎? : 當然,你實作sklearn的時候會發現你直接求AP跟你做PR在做AUC結果有點不同,是因為sk : learn官方文件公式是長這樣 : https://i.imgur.com/IrK7HTk.jpg
: delta r是Recall的變化率 : 畫成圖做比較就是 : https://i.imgur.com/eXFMug3.jpg
: 藍色是sklearn 求取的面積,紅色是PR curve,看得出來其實就是在求approximately 而 : 已,這樣的好處就是避免PR曲線擾動太大的近似算法而已。 : 以上是小弟理解的物理意義有錯還請糾正 大大你好,非常感謝你的回覆,講解的很清楚, 但對於python sklearn的average percision我還是有些疑問 在average percision documentation.中有一個例子為 import numpy as np from sklearn.metrics import average_precision_score y_true = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) average_precision_score(y_true, y_scores) 0.83 但用precision_recall_curve去畫圖 precision, recall, _ = precision_recall_curve(y_true, y_scores) plt.plot( recall,precision) https://imgur.com/a/XK2IPej 從圖來看曲線下面積不是0.83,這是因為python 是用近似算法算出來的所以跟實際上會有落差嗎? 另外PR curve會有固定的pattern或者形狀嗎? 以下是我用另外兩筆筆資料畫出來的 https://imgur.com/a/mMNVtot https://imgur.com/a/MGUO4zi 這形狀真的是.. 最後,我發現當precision為 0/0時 python 會計算成1,是因為分類正確才當成1嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.185.36.210 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1558154603.A.C61.html

05/18 13:37, 5年前 , 1F
建議你倒出csv,自己在畫一遍,實際感受一下數據
05/18 13:37, 1F

05/18 15:05, 5年前 , 2F
Precision 分母為0,代表你的預測完全沒正例,這樣分母
05/18 15:05, 2F

05/18 15:05, 5年前 , 3F
就是0,你可能要檢查你的testset或是模型。然後是的,沒
05/18 15:05, 3F

05/18 15:05, 5年前 , 4F
錯,sklearn 簡化了一些方便計算,所以你用AP跟pr_auc
05/18 15:05, 4F

05/18 15:05, 5年前 , 5F
的值不會完全相同,但是可以接受的近似解。一般來說,理
05/18 15:05, 5F

05/18 15:05, 5年前 , 6F
想上,類別平衡的PR_curve會是跟ROC類似的圖形,只是左
05/18 15:05, 6F

05/18 15:05, 5年前 , 7F
右相反。
05/18 15:05, 7F

05/19 02:06, 5年前 , 8F
但在畫pr curve時,總有個門檻值使得precision的分
05/19 02:06, 8F

05/19 02:06, 5年前 , 9F
母0,所以pr curve都是從左上角開始畫
05/19 02:06, 9F

05/19 08:46, 5年前 , 10F
喔喔喔,我以為是你直接算Precision 問說是0的情形,PR_
05/19 08:46, 10F

05/19 08:46, 5年前 , 11F
curve左邊會有一條凸起到1的算正常,只要整體形狀如我前
05/19 08:46, 11F

05/19 08:46, 5年前 , 12F
面說的一樣跟ROC比較就可以知道是否是有類別不平衡的狀
05/19 08:46, 12F

05/19 08:46, 5年前 , 13F
況。PR_curve越接近右上越接近F1_score等於1.0的情形
05/19 08:46, 13F

05/19 12:22, 5年前 , 14F
好,我了解了,非常謝謝你
05/19 12:22, 14F
文章代碼(AID): #1SturhnX (DataScience)
文章代碼(AID): #1SturhnX (DataScience)