1. 程式人生 > >學習筆記-模型分析優劣的度量

學習筆記-模型分析優劣的度量

模型分析的優劣度量

對於模型建立後,使用測試資料進行分析的時候會得到測試數對應的測試結果,根據這個結果進行統計

首先測試資料本身是可以完全知道對模型的某個屬性分類的,這裡為了簡單進行分類,就使用二元分類方式,正例和反例,現在還可以簡單的理解為好與不好,實際到了後面正例和反例的分界是可以進行調節的.這裡先進行非正即反的分析方式進行分析

先明確概念:

真正例:表示測試物件實際為真,模型判定結果也為真 記作:TP

真負例:表示測試物件實際為假,模型判定結果也為假 記作:TN

這裡就非常明顯了,測試物件總共具有P+N個

假正例:表示測試物件實際為真,模型判定結果為假 記作:FP

假負例:表示測試物件實際為假,模型判定結果為真 記作:FN

這裡需要注意的是他們之間的關聯關係:

混淆矩陣:

實際 預測正 預測負
P TP FN TP+FN = P
N FP TN FP+TN = N

混淆矩陣是分析模型預測結果的工具,這裡很容易錯誤的認為TP+TN是總的P,而實際上TP+FN才是P,這個我最開始也很容易搞錯,仔細推敲一下,TP表示真正例,FN表示假負例,這麼來理解,所有的正例中有一部分被判定為正例,一部分判定為負例,那麼背判定為負例的就是被誤判的,別人實際為正例,所以前面一定是F開頭,矩陣中以F開頭的只可能是FN和FP,這裡如何區分是FN還是FP,關鍵是後面的N和P的區別,N表示負例,P表示正例,如果後面是N,前面加上一個F叫做錯誤的預測為負例,既然是錯誤的預測為負例,別人本身就是正例才能被錯誤預測為負例.同理,如果後面是P,前面加上一個F表示錯誤的預測為正例,這裡試想本身為正的話判定為正還能叫做錯誤預測麼?要能叫做錯誤的預測為正例那隻能原來就是負例.

因此才能出現TP+FN = P,表示原來是正例的被判定為正例的個數與原來為正例被錯誤的預測為負例(FN)的個數之和為總的正例數

同樣的負例總和也是這麼思維出來的,這裡確實比較繞,需要慢慢理清楚

一個模型我們對其評價分為評價其對正例的判斷準確率和對負例的判斷準確率

所有的正例為P,預測為正的才TP,那麼被這個模型正確的預測為正的比例為
=

= T P T P + F N = T P P 召回率 = 正例的區分度=\frac{TP}{TP+FN}=\frac{TP}{P}
同樣也有對負例的識別率
= = T N T N + F P = T N N 特效性 = 對負例的區分度 = \frac{TN}{TN+FP} = \frac{TN}{N}
整理之後可以就會發現,所謂召回,實際上就是對正例的區分程度,召回率越高,模型能夠區分出正例的能力就越強,但是這並不代表模型就很牛逼,其可能對負例的區分度並不高

要表示對整體的測試樣品的區分度
= T P + T N P + N 識別率 = \frac{TP+TN}{P+N}
從公式上就能看出分子就是模型判斷正確的例項總和,分母就是所有被測例項的總和,如果某個模型能夠具有很高的識別率和很高的召回率以及高的特效性,這就說明被誤判正例和負例都很少,再回過頭看混淆矩陣的話就會發現,實際上TP和TN很大,FN和FP很小不就是正好對角線上的資料呈現相反的性質麼

這裡還有一個和識別率相反的概念
= F P + F N P + N 錯誤率 = \frac{FP+FN}{P+N}
錯誤率的意義和識別率相反

以上四個表徵資料性質的方式其實都存在相互關聯,單獨看某一個其實意義不是很大,而且實際模型訓練評估的過程中遠遠不是隻關注著幾個,還存在一個寫其他經常使用的評估引數

這裡還存在一個精度的概念,模型在預判的時候對正例判斷經常是我們需要參考的,如果某個模型給出的判斷存在很有正例很多,而實際上真正例很少,其他的正例都是負例被錯判而來的,這就說明模型對負例的區分度很差,我們就定義一個精度來描述
= T P T P + F P 精度 = \frac{TP}{TP+FP}
這裡很容易就認為TP+FP=P,這是完全錯誤的,TP確實是本身測試裡面的正例,而FP叫做被模型錯誤判斷為正例的數量,既然是被錯誤判斷為正例,就說明FP這些測試樣本本身就是負例,這裡一部分正例加上一部分負例怎麼就一定是所有的正例了?

精度實際上描述了模型在判斷為正例的測試樣品中,真正是正例的樣品所佔有的比例

注意:

召回率與精度是互斥的

兩者的分子都是TP,但是分母不同,召回率的分母是所有的正例,精度的分母是被判定為正例的總數,並不是只有正例

如果召回率很大,則說明樣本正例實際上幾乎完全被模型認為是正例了,那麼表明該模型對正例的挑選還不錯,說明這個模型對正例的查詢很全,如果精度很高,則說明FP很少,表示被誤判為正例的很少,說明這個模型查的很準

那麼實際上我們也可以稱精度為查準率,稱召回率為查全率

從純數學的角度來分析,查準率和查全率可以同時都很高,試想如果某個模型對正負例的區分度為100%,說明這個模型能夠完全區分正例和負例,並且不會錯判,那麼查準率和查全率都是1,兩者都達到了最高,那不是跟我們所謂的互斥相沖突麼?

實際上所謂的互斥是有前提的,在從純數學的角度而言,我們認為查準率和查全率可以同時增大,那實際上我們隱含的認為模型的識別能力是動態的,這與我們實際在做的過程中相違背

我們實際在訓練完一個模型以後,這個模型的識別能力已經確認了,模型進行計算後針對每一個測試樣本都存在一個具體的計算值,我們還沒有告訴模型這個值大於多少認為是正例,小於多少認為是負例.

我們對這些值進行歸一化處理,使得這些值全部壓縮到0-1之間,之後我們自己認為的設定:比如值大於0.5的為正例,小於等於0.5的為負例,這樣我們就能得到對應的TP,TN,FP,FN,之後再計算對應的查全率和查準率

這就表明模型一旦給定,樣品值的分佈也就唯一確定,那麼我們想讓整個區分點(也可以叫做閾值)上移(比如:大於0.9),那麼就會使得模型挑選出來的正例儘可能多的是真正例,從而保證了查準率很高,但是區分點這麼高的情況下必然導致很多真正例的樣品被誤判,這就會降低查全率.

同理如果降低這個區分點,比如降低到0.1,那麼模型就會給出幾乎所有的樣本都是正例,那麼背誤判的正例幾乎就沒有,因此全查率就會很高,但是這樣做必然導致很多負例也被判定為正例了(FN很大),從而導致查準率下降

因此才說明查準率和查全率實際上是互斥的

F1度量

因為查準率和查全率存在互斥,我們希望我們的模型查準率高,查全率也很高,就像一個搜尋引擎一樣,希望搜到的資訊既精確又全面.因為不同的模型存在不同的查全率和查準率,我們衡量這些模型好壞的一個引數必須要包含查全率和查準率,因此我們構建這樣的一個引數
F 1 = 2 × × + F1 = \frac{2\times查全率\times查準率}{查全率+查準率}
帶入化解之後:
F 1 = 2 × T P P + N + T P T N F1 = \frac{2\times TP}{P+N+TP-TN}
F1引數融合了查全率和查準率,這就能夠很好的度量某個模型,只有這個模型導致的查全率和查準率雙高的情況下,F1才會很高.

但是實際上有些時候我們對查全率和查準率存在不同的偏好,有些情況下我們要求查全率必須很高,不能有漏網之魚,有些時候我們又要求查準率必須很高,儘量少的對不是正例的樣本操作.根據偏好不同針對同一個樣本就會存在不同的評價.

為了表示偏好,我們再引入一個變數對F1這種引數進行控制
F β = ( 1 + β ) × × ( β 2 × ) + F_\beta = \frac{(1+\beta)\times 查全率 \times 查準率}{(\beta ^2 \times 查全率)+查準率}
那麼當β為1的時候就是F1引數,這裡的β就是代表了偏好,當β大於1時,查全率的權重就更大,當β小於1時,查準率的權重就更大,因此這就能夠有效的反應某個特定的模型是否滿足我們的需求