sklearn.metrics.roc_curve




官方網址:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics

首先認識單詞:metrics: ['mɛtrɪks] : 度量‘指標 curve : [kɝv] : 曲線

這個方法主要用來計算ROC曲線面積的;

sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)

Parameters :

y_true : 數組,shape = [樣本數]

在范圍{0,1}或{-1,1}中真正的二進制標簽。如果標簽不是二進制的,則應該顯式地給出pos_label

y_score : 數組, shape = [樣本數]

目標得分,可以是積極類的概率估計,信心值,或者是決定的非閾值度量(在某些分類器上由“decision_function”返回)。

pos_label:int or str, 標簽被認為是積極的,其他的被認為是消極的。

sample_weight: 顧名思義,樣本的權重,可選擇的

drop_intermediate: boolean, optional (default=True)

是否放棄一些不出現在繪制的ROC曲線上的次優閾值。這有助於創建更輕的ROC曲線

Returns :

fpr : array, shape = [>2] 增加假陽性率,例如,i是預測的假陽性率,得分>=臨界值[i]

tpr : array, shape = [>2] 增加真陽性率,例如,i是預測的真陽性率,得分>=臨界值[i]。

thresholds : array, shape = [n_thresholds]

減少了用於計算fpr和tpr的決策函數的閾值。閾值[0]表示沒有被預測的實例,並且被任意設置為max(y_score) + 1

要弄明白ROC的概念可以參考 :https://www.deeplearn.me/1522.html



介紹ROC曲線的兩個重要指標:

真陽性率 = true positive rate = TPR = TP/ (TP + FN)

可以這樣理解:真陽性率就是在標准的陽性(標准的陽性就等於真陽性加假陰性=TP + FN)中,同時被檢測為陽性的概率,有點繞,自行理解。

假陽性率 = false positive rate = FPR = FP / (FP+TN)

可以這樣理解:假陽性就是在標准的陰性(標准的陰性就等於假陽性加真陰性=FP + TN)中,被檢測為陽性的概率。很好理解的,本來是陰性,檢測成了陽性的概率就是假陽性率唄。



ROC曲線就由這兩個值繪制而成。接下來進入sklearn.metrics.roc_curve實戰,找遍了網絡也沒找到像我一樣解釋這么清楚的。

import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
y 就是標准值,scores 是每個預測值對應的陽性概率,比如0.1就是指第一個數預測為陽性的概率為0.1,很顯然,y 和 socres應該有相同多的元素,都等於樣本數。pos_label=2 是指在y中標簽為2的是標准陽性標簽,其余值是陰性。
所以在標准值y中,陽性有2個,后兩個;陰性有2個,前兩個。

接下來選取一個閾值計算TPR/FPR,閾值的選取規則是在scores值中從大到小的以此選取,於是第一個選取的閾值是0.8

scores中大於閾值的就是預測為陽性,小於的預測為陰性。所以預測的值設為y_=(0,0,0,1),0代表預測為陰性,1代表預測為陽性。可以看出,真陰性都被預測為陰性,真陽性有一個預測為假陰性了。

FPR = FP / (FP+TN) = 0 / 0 + 2 = 0

TPR = TP/ (TP + FN) = 1 / 1 + 1 = 0.5

thresholds = 0.8

我們驗證一下結果

print(fpr[0],tpr[0],thresholds[0])

同代碼結果一致,其余的就不演示了,剩下的閾值一次等於 0.4 0.35 0.1 自行驗證。

最后結果等於

print(fpr,'\n',tpr,'\n',thresholds)

全部代碼

import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
print(fpr,'\n',tpr,'\n',thresholds)


---------------------
作者:z智慧
來源:CSDN
原文:https://blog.csdn.net/u014264373/article/details/80487766
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM