免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
再理解下ROC曲線和PR曲線 | 丕子
大家都發(fā)表下對著倆曲線的理解吧。
分類、檢索中的評價指標很多,Precision、Recall、Accuracy、F1、ROC、PR Curve......
一、歷史
wiki上說,ROC曲線最先在二戰(zhàn)中分析雷達信號,用來檢測敵軍。誘因是珍珠港事件;由于比較有用,慢慢用到了心理學(xué)、醫(yī)學(xué)中的一些檢測等應(yīng)用,慢慢用到了機器學(xué)習(xí)、數(shù)據(jù)挖掘等領(lǐng)域中來了,用來評判分類、檢測結(jié)果的好壞。
百科:ROC曲線指受試者工作特征曲線(receiver operating characteristic curve), 是反映敏感性和特異性連續(xù)變量的綜合指標,是用構(gòu)圖法揭示敏感性和特異性的相互關(guān)系,它通過將連續(xù)變量設(shè)定出多個不同的臨界值,從而計算出一系列敏感性和特異性,再以敏感性為縱坐標、(1-特異性)為橫坐標繪制成曲線,曲線下面積越大,診斷準確性越高。在ROC曲線上,最靠近坐標圖左上方的點為敏感性和特異性均較高的臨界值。
二、原理
這里就拿最經(jīng)典的二分類(0、1)問題討論吧,分類器分類之后,往往會得到對每個樣本是哪一類的一個估計,像是LR模型就會將這個估計規(guī)范化到【0,1】,根據(jù)這個估計,你選擇一個閾值p_0,就可以將分類結(jié)果映射到0,1了;分類效果好不好跟真實的label比比就行了。
所以你手里有decision和label兩個向量,用來做分類結(jié)果的評估。
要看ROC的原理,總離不開上面這個表格,ROC繪制的就是在不同的閾值p_0下,TPR和FPR的點圖。所以ROC曲線的點是由不同的p_0所造成的。所以你繪圖的時候,就用不同的p_0采點就行。
Precision-Recall曲線,這個東西應(yīng)該是來源于信息檢索中對相關(guān)性的評價吧,precision就是你檢索出來的結(jié)果中,相關(guān)的比率;recall就是你檢索出來的結(jié)果中,相關(guān)的結(jié)果占數(shù)據(jù)庫中所有相關(guān)結(jié)果的比率;所以PR曲線要是繪制的話,也是對cutoff進行遍歷,這樣也得到了不同的precision和recall的點。例如你選擇了一個cutoff,從而根據(jù)cutoff判別分類的結(jié)果1或0。1就是檢索返回的結(jié)果,0就是沒有返回的結(jié)果。
數(shù)據(jù)庫里有500條記錄,其中50個是相關(guān)的(正樣本),你通過一個cutoff,返回了75個1,其中只有45個是真正相關(guān)的;
那么在這個cutoff對應(yīng)下的recall=45/50=0.9,precision=45/75=0.6。坐標就是(0.9,0.6),在這里繪制一個點吧。
可以看出TPR和Recall的形式是一樣的,就是查全率了,F(xiàn)PR就是保證這樣的查全率你所要付出的代價,就是把多少負樣本也分成了正的了。
上面是我的理解,不知道對不對。
三、AUC的計算
為了更好的衡量ROC所表達結(jié)果的好壞,Area Under Curve(AUC)被提了出來,簡單來說就是曲線右下角部分占正方形格子的面積比例;那么計算這個東西其實就很簡單了,根據(jù)reference的paper,有很多很多計算方法,這里推薦一種近似采樣的方法:采樣。
你的分類器能夠?qū)⒄旁谪摾懊娴母怕适嵌嗌伲簿褪遣蓸又姓膁ecision>負例的decision的概率。
stackoverflow上看到的代碼,R語言:
1
2
3
4
5
6
auc <- mean(sample(pos.decision,1000,replace=T) > sample(neg.decision,1000,replace=T))
## or
aucs <- replicate(2000,mean(sample(pos.decision,1000,replace=T) > sample(neg.decision,1000,replace=T)))
auc2 <- round(mean(aucs),4)
其實這個可以等價于對于不規(guī)則圖形的面積的采樣估計了。誰能給推導(dǎo)一下?
四、ROC中最優(yōu)的p_0的計算
簡單理解下的話,保證TPR同時代價FPR要盡量的小,是不是可以建立max(TPR+(1-FPR))的模型,然后選p_0呢?
paper中有更加詳細的方法。誰給詳細介紹下?
五、ROC和PR曲線之間的關(guān)系和不同
當正負樣本差距不大的情況下,ROC和PR的趨勢是差不多的,但是當負樣本很多的時候,兩者就截然不同了,ROC效果依然看似很好,但是PR上反映效果一般,還需要繼續(xù)努力啊。解釋起來也簡單,假設(shè)就1個正例,100個負例,那么基本上TPR可能一直維持在100左右,然后突然降到0.
ROC and precision-recall curves under class skew. (a) ROC curves, 1:1; (b) precision-recall curves, 1:1; (c) ROC curves, 1:10 and (d) precisionrecall
六、具體例子和代碼
(1)數(shù)據(jù)集
用的libsvm的那個270個樣本的數(shù)據(jù)集,用LR模型做了一下:
0.688312721844616 1
0.461679176682519 0
0.405016268379421 1
0.693999977303342 0
0.391868684948981 0
0.526391961908057 0
0.570470938139219 1
0.708771207269333 1
0.700976655664182 1
0.713584109310541 1
0.545180177320974 0
0.646156295395112 0
0.347580513944893 0
0.391577777998607 1
....
(2)ROC曲線和PR曲線
R語言的ROCR繪制的圖形:
代碼:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
library(ROCR)
a=read.table("toy.txt")
a <- as.matrix(a)
pred <- prediction(a[,1], a[,2])
perf <- performance(pred,"tpr","fpr")
auc.tmp <- performance(pred,"auc")
auc <- as.numeric(auc.tmp@y.values)
auc <- round(auc, 4)
plot(perf,colorize=TRUE,lwd=5,xlab="FPR",ylab="TPR", main=paste("AUC=",auc*100,"%"))
grid(5, 5, lwd = 1)
lines(par()$usr[1:2], par()$usr[3:4], lty=2, lwd=2, col="grey")
自己寫代碼繪制圖像和估算AUC的值,AUC和ROCR包計算的還是很接近的:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
a <- read.table("toy.txt")
a <- as.matrix(a)
label <- a[,2]
decision <- a[,1]
ngrids <- 100
TPR <- rep(0, ngrids)
FPR <- rep(0, ngrids)
p0 <- rep(0, ngrids)
for(i in 1:ngrids)
{
p0[i] <- i/ngrids
pred_label <- 1*(decision > p0[i])
TPR[i] <- sum(pred_label * label) / sum(label)
FPR[i] <- sum(pred_label * (1-label)) / sum(1-label)
}
## compute AUC
pos.decision <- decision[which(label == 1)]
neg.decision <- decision[which(label == 0)]
auc <- mean(sample(pos.decision,1000,replace=T) > sample(neg.decision,1000,replace=T))
## or
aucs <- replicate(2000,mean(sample(pos.decision,1000,replace=T) > sample(neg.decision,1000,replace=T)))
auc2 <- round(mean(aucs),4)
plot(FPR, TPR, col=4,lwd=5, type="l", main=paste("AUC=",auc2*100,"%"))
grid(5, 5, lwd = 1)
points(c(0,1), c(0,1), type="l", lty=2, lwd=2, col="grey")
##
cut.op <- p0[which(TPR-FPR == max(TPR-FPR))]
PR曲線:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre>
a <- read.table("toy.txt")
a <- as.matrix(a)
label <- a[,2]
decision <- a[,1]
ngrids <- 100
P <- rep(0, ngrids)
R <- rep(0, ngrids)
p0 <- rep(0, ngrids)
A <- rep(0, ngrids)
for(i in 0:ngrids)
{
p0[i] <- i/ngrids
pred_label <- 1*(decision > p0[i])
R[i] <- sum(pred_label * label) / sum(label)
P[i] <- sum(pred_label * label) / sum(pred_label)
A[i] <- sum((pred_label == label)*1)/nrow(a)
}
plot(R, P, col=4,lwd=5, type="l",xlab="Recall",ylab="Precision", main="PR Curve")
grid(5, 5, lwd = 1)
accuracy <- max(A)
<pre>
七、Reference
[1]Tom Fawcett:An introduction to ROC analysis
[2]Jesse Davis,Mark Goadrich:The Relationship Between Precision-Recall and ROC Curves
[3]https://en.wikipedia.org/wiki/Receiver_operating_characteristic
[4]http://baike.baidu.com/view/42249.htm
10
您可能也喜歡:
不周山:分類器評價、混淆矩陣與ROC曲線
Precision/Recall和ROC曲線原理以及Matlab源碼
博客速度放緩的情況下PR竟然到了4
多分類問題中每一類的Precision-Recall Corve曲線以及ROC的Matlab畫法
使用Jedis的ShardedJedis做Redis集群
梯度下降(Gradient Descent),一句代碼,一個式子
無覓關(guān)聯(lián)推薦[?]
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ROC-AUC手動計算
KS曲線
ROC曲線及其matlab實現(xiàn)ROC曲線的繪畫
sklearn.metrics中的評估方法介紹(accuracy
教你如何用python解決非平衡數(shù)據(jù)建模(附代碼與數(shù)據(jù))
機器學(xué)習(xí)掃盲
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服