分類演算法如何繪製roc曲線 ROC曲線繪製方法

2021-10-13 11:42:31 字數 2022 閱讀 2352

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('.\\results\\roc_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:\users\phantom\desktop\roc_data\table1'

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()

最後結果:

參考:

繪製ROC曲線

roc曲線是什麼意思,書面表述為 roc 曲線 接收者操作特徵曲線 是一種顯示分類模型在所有分類閾值下的效果的圖表。好吧,這很不直觀。其實就是乙個二維曲線,橫軸是fpr,縱軸是tpr 至於tpr,fpr怎麼計算 然後tpr,fpr的定義為 tpr tp tp fn 也就是recall fpr fp ...

python 繪製ROC曲線

簡述 機器學習很多是為測試樣本產生乙個 值,然後將這個 值與閾值進行對比,若大於閾值則分為正類,否則分為反類。這個 值的好壞,直接決定了學習器泛化能力。根據這個 值,我們可以對測試樣本進行排序,最可能 是正例的排在最前面,最不可能 是正例的排在最後面。這樣,分類過程就相當於在這個排序中以某個截斷點將...

Python學習 ROC曲線繪製

from sklearn.metrics import roc curve 匯入roc曲線函式 fpr,tpr,thresholds roc curve test 3 tree.predict proba test 3 1 pos label 1 test 3 測試集真實標記值 tree.predi...