看板 DataScience 關於我們 聯絡資訊
※ 引述《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
liton: 建議你倒出csv,自己在畫一遍,實際感受一下數據 05/18 13:37
sxy67230: Precision 分母為0,代表你的預測完全沒正例,這樣分母 05/18 15:05
sxy67230: 就是0,你可能要檢查你的testset或是模型。然後是的,沒 05/18 15:05
sxy67230: 錯,sklearn 簡化了一些方便計算,所以你用AP跟pr_auc 05/18 15:05
sxy67230: 的值不會完全相同,但是可以接受的近似解。一般來說,理 05/18 15:05
sxy67230: 想上,類別平衡的PR_curve會是跟ROC類似的圖形,只是左 05/18 15:05
sxy67230: 右相反。 05/18 15:05
disney82231: 但在畫pr curve時,總有個門檻值使得precision的分 05/19 02:06
disney82231: 母0,所以pr curve都是從左上角開始畫 05/19 02:06
sxy67230: 喔喔喔,我以為是你直接算Precision 問說是0的情形,PR_ 05/19 08:46
sxy67230: curve左邊會有一條凸起到1的算正常,只要整體形狀如我前 05/19 08:46
sxy67230: 面說的一樣跟ROC比較就可以知道是否是有類別不平衡的狀 05/19 08:46
sxy67230: 況。PR_curve越接近右上越接近F1_score等於1.0的情形 05/19 08:46
disney82231: 好,我了解了,非常謝謝你 05/19 12:22