小編寫這篇文章的主要目的,是用來給大家介紹關于Python中代碼的相關實例,比如教大家怎么用Python計算AUC代碼,具體代碼內容,下面給大家一一列舉出來。
AUC是人工智能中常用的評級判定手段,它的具體意義是什么呢?看下圖:
下面的表格給大家做出了具體的解釋
表中列代表預測分類,行代表實際分類:
實際1,預測1:真正類(tp)
實際1,預測0:假負類(fn)
實際0,預測1:假正類(fp)
實際0,預測0:真負類(tn)
真實負樣本總數=n=fp+tn
真實正樣本總數=p=tp+fn
在第一張圖中,
橫坐標false positive rate代表假正類率,由fp/n計算得到,
意為在實際負樣本中出現預測正樣本的概率。
縱坐標true positive rate代表真正類率,由tp/p計算得到,
意為在實際正樣本中出現預測正樣本的概率。
為什么指標可以衡量分類效果?
下面解釋下這條曲線內容
1、通過分類器,測試其概率,然后從高到低做一個排序
2.由上到小,分別以每一個預測概率作為閾值,大于該閾值的認定其為1,小于的為0,計算fp rate和tp rate。
對于一個有分類效果(效果比隨機要好)的分類器,剛開始將高概率作為閾值時,閾值以上的的話,可以做出一個平均值;閾值以上的假正樣本占全部負樣本的比例(fp rate)。
auc理解
auc就是:隨機抽出一對樣本(一個正樣本,一個負樣本),然后用訓練得到的分類器來對這兩個樣本進行預測,預測得到正樣本的概率大于負樣本概率的概率。
AUC計算
方法一
在有k個正樣本數據,p個負樣本的數據集里。一共有k*l對樣本(一對樣本即,一個正樣本與一個負樣本)。統計這k*l對樣本里,來預判其相關的一個概率值。
舉個例子:
假設有4條樣本。2個正樣本,2個負樣本,那么M*N=4。
即總共有4個樣本對。分別是:
(D,B),(D,A),(C,B),(C,A)。
在(D,B)樣本對中,正樣本D預測的概率大于負樣本B預測的概率(也就是D的得分比B高),記為1
同理,對于(C,B)。正樣本C預測的概率小于負樣本C預測的概率,記為0.
那么auc如下:
假如出現得分一致的時候:
同樣本是4個樣本對,對于樣本對(C,B)其I值為0.5。
方法二
利公式:
對預測概率做一個從上到下的排序
對其中的概率數值設一個rank值(最高的概率的rank為n,第二高的為n-1)
rank實際上代表了該score(預測概率)超過的樣本的數目
為了求證正樣本的score值大于負樣本,假如說有正向容量,那么,其相關的值,任意組合起來的話,都是比較大的了。我們取它的rank值為k,但是k-1中有M-1是正樣例和正樣例的組合這種是不在統計范圍內的(為計算方便我們取n組,相應的不符合的有M個),所以要減掉,那么同理排在第二位的k-1,會有M-1個是不滿足的,依次類推,故得到后面的公式M*(M+1)/2,我們可以驗證在正樣本score都大于負樣本的假設下,AUC的值為1
除以M*k
舉例說明:
排序。按概率排序后得到:
按照上面的公式,把相關的序號進行一個疊加,然后再去增刪查改:
得到:
如果出現得分一樣的情況:
假如有4個取值概率為0.5,而且既有正樣本也有負樣本的情況。計算的時候,其實原則就是相等得分的rank取平均值。具體來說如下:
先排序:
這里需要注意的是:相等概率得分的樣本,無論正負,誰在前,誰在后無所謂。
由于只考慮正樣本的rank值:
對于正樣本A,其rank值為7
對于正樣本B,其rank值為6
對于正樣本E,其rank值為(5+4+3+2)/4
對于正樣本F,其rank值為(5+4+3+2)/4
實現及驗證
采用sklearn中的庫函數驗證:
import numpy as np from sklearn.metrics import roc_curve from sklearn.metrics import auc #---自己按照公式實現 def auc_calculate(labels,preds,n_bins=100): postive_len=sum(labels) negative_len=len(labels)-postive_len total_case=postive_len*negative_len pos_histogram=[0 for _ in range(n_bins)] neg_histogram=[0 for _ in range(n_bins)] bin_width=1.0/n_bins for i in range(len(labels)): nth_bin=int(preds<i>/bin_width) if labels<i>==1: pos_histogram[nth_bin]+=1 else: neg_histogram[nth_bin]+=1 accumulated_neg=0 satisfied_pair=0 for i in range(n_bins): satisfied_pair+=(pos_histogram<i>*accumulated_neg+pos_histogram<i>*neg_histogram<i>*0.5) accumulated_neg+=neg_histogram<i> return satisfied_pair/float(total_case) if __name__=='__main__': y=np.array([1,0,0,0,1,0,1,0,]) pred=np.array([0.9,0.8,0.3,0.1,0.4,0.9,0.66,0.7]) fpr,tpr,thresholds=roc_curve(y,pred,pos_label=1) print("-----sklearn:",auc(fpr,tpr)) print("-----py腳本:",auc_calculate(y,pred))
AUC的優點:
它不受關于平衡性的影響,不同的樣本比例,其AUC的評測結果都是一樣的。所以我們在訓練的時候,可以直接使用AUC作為損失函數。
以上就是小編給大家總結的了,希望可以能給各位讀者帶來一定的幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/127815.html
對于很多從事Python的人來說,有很多的人想要去進階的,比如學習跟多的一些知識,比如,我們在工作中會遇到,使用Python計算AUC的三種方式,下面給大家做出一個解答。 介紹 AUC(Area Under Curve),其實就是ROC曲線圍成的和下坐標軸圍成的一個面積,這個面積的數值一般是不會大于1的。 當然,ROC曲線基本上都在y=x,這條直線上面的一個正上方,因此AUC的正確值應該...
摘要:問題是什么能拿來干什么如何求解深入理解是什么混淆矩陣混淆矩陣是理解大多數評價指標的基礎,毫無疑問也是理解的基礎。內容的召回往往是根據的排序而決定的。 問題: AUC是什么 AUC能拿來干什么 AUC如何求解(深入理解AUC) AUC是什么 混淆矩陣(Confusion matrix) 混淆矩陣是理解大多數評價指標的基礎,毫無疑問也是理解AUC的基礎。豐富的資料介紹著混淆矩陣的概念,...
摘要:精準率代表對正樣本結果中的預測準確程度,而準確率則代表整體的預測準確程度,既包括正樣本,也包括負樣本。分數同時考慮了查準率和查全率,讓二者同時達到最高,取一個平衡。接受者操作特征曲線曲線,又稱接受 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 ROC/AUC作為機器學習的評估指標非常重要,也是面試中經常出現的問題(80%都會問到)。其實,理解它并...
摘要:精準率代表對正樣本結果中的預測準確程度,而準確率則代表整體的預測準確程度,既包括正樣本,也包括負樣本。分數同時考慮了查準率和查全率,讓二者同時達到最高,取一個平衡。接受者操作特征曲線曲線,又稱接受 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 ROC/AUC作為機器學習的評估指標非常重要,也是面試中經常出現的問題(80%都會問到)。其實,理解它并...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02