python繪制ROC曲線的示例代碼
受試者工作特征(Receiver Operating Characteristic,ROC)的基本知識(shí)
- ROC曲線可以用來評(píng)估分類器的輸出質(zhì)量。
- ROC曲線Y軸為真陽性率,X軸為假陽性率。這意味著曲線的左上角是“理想”點(diǎn)——假陽性率為0,真陽性率為1。
- 上述的理想情況實(shí)際中很難存在,但它確實(shí)表示面積下曲線(AUC)越大通常分類效率越好。
- ROC曲線的“陡度”也很重要,坡度越大,則越有降低假陽性率,升高真陽性率的趨勢(shì)。
- ROC曲線通常用于二元分類中研究分類器的輸出(也可在多分類中使用,需要對(duì)標(biāo)簽進(jìn)行二值化【比如ABC三類,進(jìn)行分類時(shí)將標(biāo)簽進(jìn)行二值化處理[A(1)、BC(0)】、【B(1)、AC(0)】、【C(1)、AB(0)】,比如本文不作討論)。
python 實(shí)現(xiàn)
- 繪制ROC曲線主要基于python 的sklearn庫中的兩個(gè)函數(shù),roc_curv和auc兩個(gè)函數(shù)。
- roc_curv 用于計(jì)算出fpr(假陽性率)和tpr(真陽性率)
- auc用于計(jì)算曲線下面積,輸入為fpr、和tpr
roc_curv函數(shù)詳解
- roc_curve(y_true, y_score, pos_label=None, sample_weight=None,drop_intermediate=True)
- 輸入值
- y_true :一個(gè)和樣本數(shù)量一致的一維向量,數(shù)據(jù)是正確的二元標(biāo)簽。如果標(biāo)簽不是{- 1,1}或{0,1},則可以顯式指定pos_label。
- y_score:一個(gè)樣本數(shù)量一致的一維向量,目標(biāo)分?jǐn)?shù)可以是陽性類的概率估計(jì)、置信度值或決策的非閾值度量(在某些分類器上由“decision_function”返回,比如SVM)。簡單的理解就是對(duì)測(cè)試集進(jìn)行分類后得到的一個(gè)用于衡量該類是陽性還是陰性的分?jǐn)?shù)度量,分類器也是根據(jù)這個(gè)分?jǐn)?shù)來判斷測(cè)試集是陽性樣本還是陰性樣本,因此通常都可以在分類器的中間過程拿到這個(gè)分?jǐn)?shù)。
- pos_label:樣本標(biāo)簽,如果y_true不滿足{0,1},{-1,1}標(biāo)簽時(shí)則需要通過該參數(shù)指定那些是陽性樣本,其余的則為陰性樣本,默認(rèn)不輸入。
- sample_weight:一個(gè)樣本數(shù)量一致的一維向量,指定每個(gè)樣本的權(quán)重,默認(rèn)不輸入。
- drop_intermediate:為true時(shí)(默認(rèn)= True)會(huì)刪除一些不會(huì)出現(xiàn)在ROC曲線上的次優(yōu)閾值。
- 返回值
- fpr:假陽性率序列,數(shù)量與thread一致的一維向量。
- tpr:真陽性率序列,數(shù)量與thread一致的一維向量。
- thread:該序列是一個(gè)遞減序列,在每一個(gè)閾值下對(duì)y_score進(jìn)行劃分,大于的視為陽性,小于的視為陰性,從而計(jì)算出該閾值下的fpr。
代碼示例
# 導(dǎo)包 import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, auc # 計(jì)算 fpr, tpr, thread = roc_curve(y_test, y_score) roc_auc[i] = auc(fpr, tpr) # 繪圖 plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', ? ? ? ? ?lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") plt.savefig('roc.png',) plt.show()
y_test 數(shù)據(jù)示例:
0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1
y_score:數(shù)據(jù)示例:
-0.763011 -0.202245 0.118015 -0.907809 -0.0111619 -0.604873 0.0228349 -0.610769 -0.375728
-0.470174 -0.422242 -0.335587 -0.227239 -0.0785673 -0.533834 0.121637 -0.713569 -0.551115
0.379913 -0.111076
更多SVM及ROC的介紹見文章:
python基于sklearn的SVM和留一法(LOOCV)進(jìn)行二分類
python:Sklearn SVM使用留一法時(shí)如何繪制ROC曲線與計(jì)算AUC
到此這篇關(guān)于python繪制ROC曲線的示例代碼的文章就介紹到這了,更多相關(guān)python繪制ROC曲線內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Phantomjs抓取渲染JS后的網(wǎng)頁(Python代碼)
phantomjs:我的理解就是它是一個(gè)無顯示的瀏覽器,也就是說除了不能顯示頁面內(nèi)容以外,瀏覽器能干的活兒它基本上都能干。下面我們就來利用他做點(diǎn)有趣的事情2016-05-05opencv python 圖像去噪的實(shí)現(xiàn)方法
這篇文章主要介紹了opencv python 圖像去噪的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08python導(dǎo)出chrome書簽到markdown文件的實(shí)例代碼
python導(dǎo)出chrome書簽到markdown文件,主要就是解析chrome的bookmarks文件,然后拼接成markdown格式的字符串,最后輸出到文件即可。下面給大家分享實(shí)例代碼,需要的朋友參考下2017-12-12Python設(shè)計(jì)實(shí)現(xiàn)的計(jì)算器功能完整實(shí)例
這篇文章主要介紹了Python設(shè)計(jì)實(shí)現(xiàn)的計(jì)算器功能,結(jié)合完整實(shí)例形式分析了Python3.5實(shí)現(xiàn)計(jì)算器功能的正則、字符串及數(shù)值運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08Python推導(dǎo)式簡單示例【列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式】
這篇文章主要介紹了Python推導(dǎo)式,結(jié)合簡單實(shí)例形式分析了Python列表推導(dǎo)式、字典推導(dǎo)式與集合推導(dǎo)式基本使用方法,需要的朋友可以參考下2018-12-12django 實(shí)現(xiàn)后臺(tái)從富文本提取純文本
這篇文章主要介紹了django 實(shí)現(xiàn)后臺(tái)從富文本提取純文本,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python使用captcha庫制作帶參數(shù)輸入驗(yàn)證碼案例
這篇文章主要介紹了Python使用captcha庫制作驗(yàn)證碼,帶參數(shù)輸入,本文通過實(shí)例案例解析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05django rest framework之請(qǐng)求與響應(yīng)(詳解)
下面小編就為大家?guī)硪黄猟jango rest framework之請(qǐng)求與響應(yīng)(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望對(duì)大家有所幫助2017-11-11