1. 程式人生 > >斯坦福大學機器學習筆記——機器學習系統設計(誤差分析、查全率和查準率、F1值)

斯坦福大學機器學習筆記——機器學習系統設計(誤差分析、查全率和查準率、F1值)

這次部落格我們主要討論機器學習系統設計的主要問題,以及怎樣巧妙的構建一個複雜的機器學習系統。
我們先用一個例子引入機器學習系統的設計:
以一個垃圾郵件分類器演算法為例:
這裡寫圖片描述
對於該問題,我們首先要做的是怎樣選擇並且表達特徵向量x。我們可以選擇100個詞所構成的列表(這個詞不僅包括垃圾郵件裡面的詞同時還包括非垃圾郵件裡面的詞,我們這裡是手動選擇的100個詞,而在真正的演算法中我們一般選擇出現頻率最高的10000~50000個詞),這些詞在郵件中出現標為1,不出現標為0,所以我們構建好了特徵向量,尺寸為100*1。
例如上述我們選擇的詞包括:deal、buy、discount、andrew,now等詞彙,則對於左圖我們構建的特徵向量為x=[1;1;0;0;1;…]。
上述構建演算法的過程中,我們會有很多問題去考慮,比如:
1. 收集更多的資料,獲取更多的垃圾郵件和非垃圾郵件;
2. 基於郵件的路徑資訊開發出更加複雜的特徵;
3. 基於郵件的正文資訊開發出更加複雜的特徵;
4. 為探測可以的拼寫錯誤開發成複雜的特徵。
考慮了上述這些問題之後,我們仍然面對一個難題,那就是如何系統的從上述考慮的問題選擇其中的一個或者多個,使得演算法的效能得到提升,我們在下面會進行詳細的討論。

誤差分析以及構建學習系統的一般方法:
誤差分析我們在前面的部落格中已經講述過,它主要包括訓練集誤差、交叉驗證集誤差、測試集誤差以及學習曲線等誤差分析的方法。它可以衡量一個學習系統性能的好壞,同時促進你對該學習系統的改進。
我們設計機器學習系統的一般流程為:
1. 從一個簡單的能快速實現的演算法開始,實現該演算法並用交叉驗證集資料測試這個演算法
2. 繪製學習曲線(可以通過分析訓練集誤差和交叉驗證集誤差,判斷該演算法處於過擬合階段還是欠擬合階段),決定是增加更多資料(過擬合階段),或者新增更多特徵(欠擬合階段)
3. 進行誤差分析:人工檢查交叉驗證集中我們演算法中產生預測誤差的例項,看看這些例項是否有某種系統化的趨勢(比如某種詞彙很容易錯分等),確定了系統化的趨勢之後,改進分類器(比如加入某些缺少的特徵等)
我們簡答解釋一下為什麼這樣構建學習系統:
1.為什麼從一些簡單的能快速實現的演算法開始?在我們設計機器學習系統時,剛開始確定使用哪些複雜的特徵時很困難的,所以我們可以先採用一些簡單的比較明顯的特徵構建系統;
2.為什麼繪製學習曲線?從上面步驟構建的系統肯定效能不是很高(僅僅採用了一些比較明顯的特徵),我們可以繪製出學習曲線,判斷上述構建的分類器是處於過擬合階段還是欠擬合階段,並針對所處的階段進行相應的處理(過擬合階段,收集更多的訓練樣本,欠擬合階段,去補充更多特徵);
3.為什麼進行誤差分析:通過上述構建的系統,分析一下誤差產生的來源,對預測錯誤的例項進行分析,同時觀察是否具有某些規律,然後對顯示出來的規律進行進一步的改進,使得演算法的效能進一步提高。
為了量化改進前後的效能的改變,我們可以使用交叉驗證錯誤率來衡量,可以直觀的幫助我們判斷對演算法進行修改前後效能的變化。

error=1mcvi=1mtesterr(hθ(x(i)test),y(i)))

其中,
這裡寫圖片描述

誤差分析也不是總能幫助我們判斷採取什麼行動,有時候也需要我們嘗試不同的模型,也就是我們前面講述的將資料集劃分為訓練集、交叉驗證集和測試集,從不同的模型中選擇最優的模型,具體實現的過程可以參考這篇部落格

類偏斜的誤差度量:
上述我們講述了誤差分析以及誤差度量值,來幫助選擇模型以及改進學習系統,其中選擇合適的度量值是至關重要的,下面我們來討論偏斜類問題以及該問題合適的誤差度量。
所謂的偏斜類問題也就是對於我們的資料集中,某一類佔據絕對的主導地位,而其他類別佔據很少的一部分。比如我們前面討論的腫瘤問題,資料集中絕大多數都是良性腫瘤(約佔99.5%),只有很少一部分是惡性腫瘤(約佔0.5%)。
如果對上述問題採用分類精度作為度量,我們在進行學習之後得到一個很好的模型,它正確劃分的精度為1%;而如果我們不進行訓練,將所有的樣本均判斷為良性的,分類精度可以達到0.5%,從上述可以看出,針對偏斜類問題,用分類精度作為誤差的度量,存在著問題,明顯訓練得到的1%的誤差比不訓練得到的0.5%更能代表這個資料集。
所以我們使用另一種誤差度量的方法:查準率(Precision)和查全率(Recall,也叫召回率),我們先將預測的結果分為四種情況,然後給出查準率和查全率的表示式:
1. 正確肯定(True Positive, TP): 預測為真,實際為真;
2. 正確否定(True Negative, TN): 預測為假,實際為假;
3. 錯誤肯定(False Positive, FP): 預測為真,實際為假;
4. 錯誤否定(False Negative, FN): 預測為假,實際為真
查準率P:

P=TPTP+FP

它表示的是在所有預測為噁心腫瘤的樣本中,實際真正患有惡性腫瘤的百分比,對於訓練的模型來說,P越高訓練的模型越好。
查全率R:

R=TPTP+FN

它表示的是所有實際真正患有惡性腫瘤的樣本中,預測為惡性腫瘤的百分比,對於訓練的模型來說,R越高訓練的模型越好。
值得注意的是,對於在查準率和查全率的定義中,我們習慣將少量的類用標籤1表示。
例如我們上述的情況,將所有的樣本全部判別為良性,由於TP=0,同時TP+FN0,所以查全率為0,表示效能不好。所以查全率和查準率解決了偏斜類數值評估的問題。

查全率和查準率的權衡:
上述我們談論了查準率和查全率,在很多應用中我們希望查全率和查準率達到相對平衡。
還是以腫瘤預測為例,進行下一步的探討。假設我們的演算法輸出的結果在0~1之間,我們使用閾值0.5來預測真假。
這裡寫圖片描述
如果我們想要更高的查準率,即在非常確信的情況下才判斷為惡性腫瘤,我們可以將上述的閾值調高,可以將閾值設定為比0.5大的數值,比如0.7、0.9等,這樣做可以減少錯誤判斷為惡性腫瘤的情況,但是同時也會增加未能成功預測腫瘤為惡性的情況,即FP降低,FN增加。
如果我們想要更高的查全率,即儘可能的讓所有可能是惡性腫瘤的病人得到進一步的檢查,我們可以將閾值設定小於0.5,比如0.3等,這樣做會減少錯誤將惡性腫瘤判斷為良性的情況,但是同時增加了實際為良性腫瘤,卻判斷為惡性腫瘤的情況,即FN增加,FP降低。
為了權衡查全率和查準率,我們繪製出在不同閾值下的查全率和查準率曲線,曲線的形狀會根據資料的不同而不同:
這裡寫圖片描述
上述三條曲線都是查準率和查全率曲線,具體是哪一條取決於資料。
為了找到一個最佳的查全率和查準率的折中,我們一般通過計算F1值(F1 Score)確定,計算公式為:

F1Score=2P×RP+R

我們在不同閾值下,分別計算出P和R,進而計算出F1的值,找到一個最大的F1值(F1值越大,表示該模型越好),即為最優的查全率和查準率的折中,同時對應的閾值為最優的閾值。
我們在極端情況下,看看F1值是否適用:
1. 當P和R很小時,即說明模型的效能不是很好,此時的F1值為0,表示效能不好,所以F1值可以適用於該種情況;
2. 當P和R的值均為1時,說明此時的模型效能很好,此時的F1值為1,表示效能很好,所以F1值同樣適用於這種情況。

機器學習的資料:
下面我們來討論一下機器學習系統設計的另一個內容:用於訓練的資料有多少。
一般我們認為得到大量的資料並在某種型別的學習演算法中進行訓練,可以是一種有效的獲得一個具有良好效能的學習演算法。而這種情況往往出現在這些條件對於你的問題都成立,並且擁有大量資料的情況下。我們下面對於這些條件進行討論。
大量資料獲得好效能的基本原理:
1. 要求特徵值x包含足夠多的資訊,這些資訊可以幫助我們用來準確的預測y,這種模型保證了該演算法是低偏差(多種特徵)模型,防止了欠擬合,它能夠擬合出非常複雜的函式,使得訓練誤差很小。
2. 同時要求大量的訓練資料,訓練資料大於引數的數量(防止產生過擬合過擬合),保證較低的方差,使得訓練集的損失函式與測試集的損失函式大致相等,又通過上述步驟1,使得訓練集的損失函式和測試集的損失函式都很小。
這裡寫圖片描述
步驟一防止欠擬合,保證了較低的偏差,步驟二防止過擬合,保證了較低的方差,通過上述兩個步驟就構建出了效能很好的機器學習演算法。