日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

ROC曲线 1

發(fā)布時(shí)間:2025/7/25 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROC曲线 1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ROC曲線


http://www.datakit.cn/blog/2015/02/03/ROC_curve.html


在分類預(yù)測中,我們一般比較關(guān)注準(zhǔn)確率,但是,混淆矩陣也是非常重要的。尤其是當(dāng)我們都其中的某一類別特別感興趣的時(shí)候,通常要單獨(dú)的看這個(gè)類別的召回率和精度,比如在癌癥診斷過程中,我們寧愿錯(cuò)誤的認(rèn)為一個(gè)人是癌癥,也不愿意把一個(gè)癌癥錯(cuò)誤的認(rèn)為是正常人。本文以二元分類為例,分析ROC曲線及相關(guān)知識(shí)。

目錄

  • 1、混淆矩陣
  • 2、ROC曲線
  • 3、ROC代碼

1、混淆矩陣

混淆矩陣如下圖所示,就是把實(shí)際的類別和預(yù)測類別做一一對(duì)應(yīng),看看各個(gè)類別下正確預(yù)測了多少,錯(cuò)誤預(yù)測了多少。在一些不平衡數(shù)據(jù)集中,一般認(rèn)為稀有類別更有意義,通常計(jì)為正類,比如根據(jù)一系列指標(biāo),判斷一個(gè)人是否是癌癥,這種數(shù)據(jù)集中,癌癥的人數(shù)是少數(shù),即稀有類,標(biāo)為正類。

在混淆矩陣中,有一些比較常用的量,但是不同的教材翻譯也不一樣,我一般都直接使用英文來理解混淆矩陣?yán)锏牧?#xff0c;中文翻譯里,我用的比較多的是召回率和精度。這個(gè)矩陣也比較容易記憶,就是預(yù)測的結(jié)果是P(positive)和N(negative),如果符合實(shí)際值就是T(True),不符合實(shí)際值就是F(False)。因此FN是指false negative,也就是錯(cuò)誤預(yù)測為負(fù)樣本的數(shù)(實(shí)際應(yīng)該是正樣本)。所以,組合成了里面的各個(gè)字符,比如TP,TN等等。那么準(zhǔn)確率就是分類正確(即以T開頭的)的除以總數(shù),即(TP + TN)/(FP + TN + FP + FN)。這里額外說一些指標(biāo),也方便復(fù)習(xí)。

  • 特指度(specificity),即真負(fù)率(true negative rate) TNP = TN / (TN+FP), 是指被模型正確預(yù)測的負(fù)樣本比例。
  • 召回率(recall) r = TP / (TP + FN),度量了被分類器正確預(yù)測的正樣本比例。
  • 精度(precision) p = TP / (TP + FP),指在分類器斷言為正類的樣本中實(shí)際為正類的比例。

在分類過程中,我們通常都可以通過調(diào)整閾值來調(diào)整這些值。比如還是癌癥的例子,假設(shè)實(shí)際患癌癥的比例是1%,使用貝葉斯分類,一般認(rèn)為是癌癥的比例大于0.5,就認(rèn)為他是癌癥。這樣雖然準(zhǔn)確率達(dá)到了最大,但是,對(duì)我們的目標(biāo)而已,沒有任何作用,比如我們都預(yù)測樣本是非患者,那么準(zhǔn)確率就是99%了。我們更關(guān)注癌癥患者的召回率,即提高癌癥患者的召回率,也就是能夠把所有的癌癥患者全部給預(yù)測出來。那么我們就需要降低閾值,即認(rèn)為如果一個(gè)患癌癥的概率大于0.1 或者0.01時(shí),就認(rèn)為他是癌癥患者。這樣,就會(huì)導(dǎo)致大量的非癌癥患者被認(rèn)定為癌癥患者,但是同時(shí)也不容易漏掉一些真正的癌癥患者。連接到混淆矩陣,就是我們提高了預(yù)測為positive的比例,使得TP和FP的都提升了,這樣獲得了高的召回率(小于1的正分?jǐn)?shù),分子分母都加一個(gè)正整數(shù),分?jǐn)?shù)值增大),犧牲了準(zhǔn)確率(多數(shù)情況下,也犧牲了精度)。同樣,在垃圾郵件中,我們可能會(huì)選擇提供閾值,這樣可以達(dá)到盡可能的不把正常的郵件認(rèn)定為垃圾郵件。

我們希望構(gòu)建的模型,具有很高的召回率和精度的分類模型。另外,我們也有一個(gè)度量可以把這兩個(gè)指標(biāo)合并在一起,即$$F_1 = \frac{2rp}{r + p} = \frac{1}{\frac{1}{r} + \frac{1}{p}},是召回率和精度的調(diào)和平均值,會(huì)傾向于比較小的那個(gè)數(shù)。

2、ROC曲線

ROC曲線(receiver operating characteristic curve,受試者工作特征曲線)是顯示分類器真正率(TPR)和假正率(FPR)之間折中的一種圖形化方法。一個(gè)好的分類模型應(yīng)該盡可能的靠近ROC曲線的左上角如果隨機(jī)猜測的話,那么TPR和FPR會(huì)一直相等,最終曲線是主對(duì)角線。另外,我們也可以用曲線下的面積,來表示一個(gè)模型的平均表現(xiàn)。

那么我們?nèi)绾卫L制ROC曲線呢?思路比較簡單,就是把得到的概率值和類別按照概率值排序。之后不斷的調(diào)整閾值(從高到低,1到0),看看每個(gè)閾值對(duì)應(yīng)的TPR和FPR,之后繪圖就可以了。當(dāng)然,直接使用概率值作為閾值是為了繪圖的連續(xù)性。我們也可以選擇閾值為0-0.1…-1.0一共11個(gè)閾值,之后計(jì)算這些閾值對(duì)應(yīng)的TPR和FPR,得到十一個(gè)點(diǎn),進(jìn)行繪圖。這里我做了兩個(gè)roc的代碼。第一個(gè)里面是把準(zhǔn)確率計(jì)算在內(nèi)了,這樣方面我們確定最高準(zhǔn)確率對(duì)應(yīng)的閾值,當(dāng)然我是想看看所有的閾值對(duì)應(yīng)的準(zhǔn)確率,所以最后用了排序。如果只是為了得到最好的,那么過程中,增加一個(gè)比較就可以了。第二個(gè)里面,純粹是為了得到roc曲線。注意,有些時(shí)候,為了方便查看,繪圖的時(shí)候坐標(biāo)軸也不是非要在0和1,也可以設(shè)定為0.1-0.3等等區(qū)間。進(jìn)行對(duì)比。

3、ROC代碼

def roc1(scores):# scores[0][1] is predict# scores[0][0] is the targetm = len(scores)pos_num = sum([i[0] for i in scores])neg_num = m - pos_numfp, tp = [], []FP, TP = 0, 0# decent the scores scores = sorted(scores, key=lambda x:x[1], reverse=True)accs = []for n,s in enumerate(scores):TP = len([i for i in scores[0:n] if i[0] == 1])TN = len([i for i in scores[n:] if i[0] == 0])FP = len([i for i in scores[0:n] if i[0] == 0])accs.append([float(TP+TN)/m, s[1]]) fp.append(float(FP) / neg_num)tp.append(float(TP) / pos_num)fp.append(1)tp.append(1)# get the best thesholdaccs = sorted(accs, reverse=True) return fp, tp, accs[0]def roc2(scores):# scores[0][1] is predict# scores[0][0] is the targetm = len(scores)pos_num = sum([i[0] for i in scores])neg_num = m - pos_numfp, tp = [], []FP, TP = 0, 0# decent the scores scores = sorted(scores, key=lambda x:x[1], reverse=True)threshold = 1.0for s in scores: if s[1] < threshold:fp.append(float(FP) / neg_num)tp.append(float(TP) / pos_num)if s[0] == 1:TP += 1else:FP += 1fp.append(1)tp.append(1)return fp, tp scores = [[1, 0.2], [1, 0.8], [1,0.89], [1, 0.98],[0, 0.1], [0, 0.3], [0,0.34], [0, 0.56]]fp1, tp1, accs1 = roc1(scores) fp2, tp2 = roc2(scores)

總結(jié)

以上是生活随笔為你收集整理的ROC曲线 1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。