日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

數(shù)據(jù)科學(xué)中的R和Python: 淺談ROC曲線

 panhoy 2015-03-26
機(jī)器學(xué)習(xí)中很常見的一個(gè)大類就是二元分類器。很多二元分類器會(huì)產(chǎn)生一個(gè)概率預(yù)測值,而非僅僅是0-1預(yù)測值。我們可以使用某個(gè)臨界點(diǎn)(例如0.5),以劃分哪些預(yù)測為1,哪些預(yù)測為0。得到二元預(yù)測值后,可以構(gòu)建一個(gè)混淆矩陣來評(píng)價(jià)二元分類器的預(yù)測效果。所有的訓(xùn)練數(shù)據(jù)都會(huì)落入這個(gè)矩陣中,而對(duì)角線上的數(shù)字代表了預(yù)測正確的數(shù)目,即True Positive+True Nagetive。同時(shí)可以相應(yīng)算出TPR(真正率或稱為靈敏度)和TNR(真負(fù)率或稱為特異度)。我們主觀上希望這兩個(gè)指標(biāo)越大越好,但可惜二者是一個(gè)此消彼漲的關(guān)系。除了分類器的訓(xùn)練參數(shù),臨界點(diǎn)的選擇,也會(huì)大大的影響TPR和TNR。有時(shí)可以根據(jù)具體問題和需要,來選擇具體的臨界點(diǎn)。


如果我們選擇一系列的臨界點(diǎn),就會(huì)得到一系列的TPR和TNR,將這些值對(duì)應(yīng)的點(diǎn)連接起來,就構(gòu)成了ROC曲線。ROC曲線可以幫助我們清楚的了解到這個(gè)分類器的性能表現(xiàn),還能方便比較不同分類器的性能。在繪制ROC曲線的時(shí)候,習(xí)慣上是使用1-TNR作為橫坐標(biāo),TPR作為縱坐標(biāo)。下面來看看如何在R語言中繪制ROC曲線。
# 做一個(gè)logistic回歸,生成概率預(yù)測值
model1 <- glm(y~., data=newdata, family='binomial')
pre <- predict(model1,type='response')
# 將預(yù)測概率prob和實(shí)際結(jié)果y放在一個(gè)數(shù)據(jù)框中
data <- data.frame(prob=pre,obs=newdata$y)
# 按預(yù)測概率從低到高排序
data <- data[order(data$prob),]
n <- nrow(data)
tpr <- fpr <- rep(0,n)
# 根據(jù)不同的臨界值threshold來計(jì)算TPR和FPR,之后繪制成圖
for (i in 1:n) {
    threshold <- data$prob[i]
    tp <- sum(data$prob > threshold & data$obs == 1)
    fp <- sum(data$prob > threshold & data$obs == 0)
    tn <- sum(data$prob < threshold & data$obs == 0)
    fn <- sum(data$prob < threshold & data$obs == 1)
    tpr[i] <- tp/(tp+fn) # 真正率
    fpr[i] <- fp/(tn+fp) # 假正率
}
plot(fpr,tpr,type='l')
abline(a=0,b=1)
R中也有專門用來繪制ROC曲線的包,例如常見的ROCR包,它不僅可以用來畫圖,還能計(jì)算ROC曲線下面積AUC,以評(píng)價(jià)分類器的綜合性能,該數(shù)值取0-1之間,越大越好。
library(ROCR)
pred <- prediction(pre,newdata$y)
performance(pred,'auc')@y.values #AUC值
perf <- performance(pred,'tpr','fpr')
plot(perf)
ROCR包畫圖函數(shù)功能比較單一,筆者比較偏好使用功能更強(qiáng)大的pROC包。它可以方便比較兩個(gè)分類器,還能自動(dòng)標(biāo)注出最優(yōu)的臨界點(diǎn),圖看起來也比較漂亮。
library(pROC)
modelroc <- roc(newdata$y,pre)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
     grid.col=c("green", "red"), max.auc.polygon=TRUE,
     auc.polygon.col="skyblue", print.thres=TRUE)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多