roc(receiver operating characteristic)曲線即受試者工作特徵曲線。roc曲線與座標軸圍成的面積被稱為auc(area under curve),這兩個指標和敏感性、特異性和準確性一起,是評估演算法模型效能常用的指標。
在進一步介紹roc曲線如何繪製之前,先引入幾個概念。tp(true positives),tn(true negatives),fp(false positives),fn(false negatives) 分別為陽性樣本正確分類數量、陰性樣本正確分類數量、陽性樣本錯誤分類數量以及陰性樣本錯誤分類數量。
陽性樣本正確分類數量佔陽性樣本總數的比例tpr(即敏感性,sensitivity),陰性樣本正確分類的數量佔陰性樣本總數的比例fpr(即1-特異性,1-specificity)計算如下:
(陽性樣本被判斷為陽性/陽性樣本總數)
(陰性樣本被判斷為陽性/陰性樣本總數)
roc曲線橫座標為fpr,縱座標為tpr。roc曲線直觀上反映了模型在選擇不同閾值的時候敏感性與1-特異性的趨勢走向。
繪製roc曲線需要得到輸出結果的概率。對於普通數值型輸入,模型測試時在輸出部分增加softmax函式,然後取陽性概率值。
gt = torch.floattensor()
pd = torch.floattensor()
output_sfmx = torch.softmax(logits, dim=1)[:,1] # 取輸出結果的概率,並取第二列
pd = torch.cat((pd, output_sfmx.data.cpu()),0) # 目標值
gt = torch.cat((gt, label.float().cpu()),0)
roc_data =
df = pd.dataframe(roc_data) # 把輸出的概率和目標組合稱dataframe形式,然後儲存,用於下一步繪製roc去曲線
df.to_csv('.resultsroc_data_bce_%d.csv' % k)
得到目標值和輸出概率之後,借助於sklearn.metrics中的roc_curve和auc方法進行繪圖和計算。
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.metrics import roc_curve, auc
import os
plt.style.use('classic')
path = r'c:usersphantomdesktoproc_datatable1'
files = os.listdir(path)
fprs =
tprs =
aucs=
for i,file in enumerate(files):
pf = os.path.join(path,file)
df = pd.read_csv(pf)
pred = df.iloc[:, 1].tolist()
target = df.iloc[:, 2].tolist()
fpr, tpr, thresholds = roc_curve(target,pred) #計算fpr和tpr,用於下一步繪圖和auc計算
plt.plot(fprs[0],tprs[0], lw=1.5, label="w-y, auc=%.3f)"%aucs[0])
plt.plot(fprs[1],tprs[1], lw=1.5, label="y-y, auc=%.3f)"%aucs[1] )
plt.plot(fprs[2],tprs[2], lw=1.5, label="w-w, auc=%.3f)"%aucs[2] )
plt.xlabel("fpr",fontsize=15)
plt.ylabel("tpr",fontsize=15)
plt.title("roc")
plt.legend(loc="lower right")
plt.show()
最後結果:
參考:[1]
[2]
curve函式 roc R語言畫ROC曲線總結
在本文中,我描述了如何在cran中搜尋用於繪製roc曲線的包,並重點介紹了六個有用的包。儘管我從一些我想談論的軟體包開始就有了一些想法,例如rocr和proc 我在過去發現它們很有用 但我還是決定使用 相對較新的軟體包pkgsearch來搜尋cran並檢視其中的內容。該package search ...
logsig tansig relu函式曲線繪製
figure numbertitle off name sigmoid函式 x 10 0.1 10 y 1 1 exp x plot x,y xlabel x軸 ylabel y軸 座標軸表示物件標籤 grid on 顯示網格線 axis on 顯示座標軸 axis 8,8,0,1 x,y的範圍限制...
CAD二次開發Curve類函式
1.getarea 功能 獲取曲線面積值 2.getclosestpointto 功能 獲得曲線外點到曲線最近距離曲線上的點,或者兩條曲線間最近距離的點 3.getdistatparam 功能 獲得曲線上任一引數到曲線起點引數的距離或者曲線上兩引數間的距離 public virtual double...