當學習樣本的準確率過高時,很有可能學習者會學習到樣本的獨有特征,而相對忽略了大部分樣本的普遍特征。這種情況稱為過擬合,壹般過擬合模型的泛化能力比較差。相比之下,欠擬合意味著模型訓練的精度太低,甚至沒有學習到樣本的壹般特征。下圖很好地解釋了這兩種情況。
通過添加更多的數據和增加訓練次數,可以很容易地解決欠擬合問題。過擬合比較麻煩,在機器學習算法中也無法完全避免。優秀的算法會想辦法減少過擬合的影響。目前建立機器學習模型的算法和參數調整方法很多,這裏就涉及到模型選擇的問題。要有相應的評價和選擇方法,找到泛化能力最強的模型。下面將介紹壹些模型評估和選擇的方法。
現在有了已知的數據集D,我們的目標就是把它分成訓練集S和測試集T,讓模型的學習和泛化能力得到盡可能的發展。
擱置法的思路很簡單,就是把數據集D直接分成兩個互斥的集合,壹個作為訓練集,壹個作為測試集。數據集還對分部細節有要求。我們必須保證整個數據集的標簽類型在劃分時是均勻分布的,也就是保證機器在訓練和測試時能遇到所有的情況。單次使用預留法的結果不夠準確,因為不同子方法的訓練和測試結果會有所不同,所以將訓練集和測試集隨機分多次進行訓練和測試,取多次正確率的平均值得到最終結果。訓練集與數據集的比值沒有完美的解,壹般經驗值為2/3~4/5。
交叉驗證法首先將m個樣本的數據集D分成k個大小相近的互斥子集,並且都保持數據標簽的均勻分布。每次使用k-1個子集進行訓練,剩下的1個子集用於測試。有K種嘗試,我們最後返回K個結果的平均值。算法驗證的好壞主要取決於k的值,通常取k=10,所以該算法也被稱為“十重交叉驗證”,其示意圖如下。與擱置法相比,交叉驗證顯然更加穩定和公平。
當k=m是特例,每個樣本都被看作壹個自我時,評價方法可以稱為LOO,不受隨機樣本順序的影響,所以結果會更準確。但如果數據集太大,樣本太多,計算時間會大大增加。
前兩種方法需要將訓練集和測試集從數據集中分離出來進行學習和預測,使用不同的劃分方法會導致不同的結果,而單向方法不會有這種情況,但是大的數據集會增加算法的復雜度。為了結合上述算法的兩個優點,這裏提出了壹種自助方法。
自助法的特點是訓練集和測試集都來自同壹個數據集。我們壹次從數據集中抽取壹個樣本復制到訓練集中,重復M次,這樣我們就有了M個訓練集的樣本。當然,這樣會有重復的樣本,但是我們計算壹個樣本永遠不會被收集的概率如下:
所以當樣本足夠多的時候,我們也可以拿出2/3左右作為訓練集,剩下的作為測試集。這種算法使得每個樣本都有可能被抽取出來,這種檢驗也被稱為“包外估計”。自助法產生的數據集改變了初始數據集的分布,因此需要引入估計偏差。所以還是那句話,為了避免計算麻煩,建議用前兩種,反之亦然。
除了以上的評估方法,每種算法還需要調整參數,因為參數的不同訓練結果會有顯著差異,所以參數調整也很重要,影響最終的評估結果。其實參數整定也是壹種算法選擇。在現實中,我們經常使用“嘗試”的方法來獲得壹個相對較好的參數結果。首先設置參數的取值範圍,然後設置步長,這樣計算機就可以遍歷每種情況,選擇最佳結果。壹般要慎重選擇步長,因為大規模的工程參數很多。步長越短,算法復雜度越高,消耗的計算資源越多。
當我們完成評估和選擇算法時,我們應該使用數據集中的所有數據進行訓練,並交付最終的訓練模型。另外,為了區分,也把模型評估選取的數據集稱為驗證集。比如在估計壹個訓練模型的泛化能力時,數據集會分為訓練集和驗證集,其中驗證集的結果主要用於參數調整。
性能度量主要用於定量評估機器學習模型的性能。不同的模型,采用不同的測量方法會有不同的結果。所以評價結果是相對的,模型的好壞取決於算法、數據和任務需求。最常用的性能測量方法是均方根誤差,它與概率密度相結合來定義表示。這裏就不介紹了,下面介紹分類任務中常用的性能測量方法。在建立模型之前,制作以下符號:
樣本集:
哪裏是的正確標簽?如果學習者設置為,則為預測結果。
錯誤率定義:
精度定義:
其中為二進制符號,括號內的邏輯正確性為1,誤差為0。
這是分類任務的兩種常用方法,分別適用於二分類任務和多分類任務。根據概率密度的定義,我們可以用數據分布D和概率分布P來做壹個更壹般的定義:
錯誤率概率分布的定義:
精確度概率分布的定義:
雖然2.3.1中的方法是常用的,但我們有時會關心訓練集或數據集中的具體訓練數據(壹個好西瓜我答對了多少分等等。),而這種方式並不符合此時的需求。所以這裏有三種方法可以更準確的測量模型。這裏以二元分類為分析對象,我們可以將預測結果分為真例、假正例、真反例、假反例四種類型,分別用字母TP、FP、TN、FN表示,其中t表示真,f表示假,p表示正,n表示負。混淆矩陣定義如下:
根據上述符號假設,精度p和召回率r定義如下:
精度和召回率是矛盾的。算法的正確“範圍”(比如西瓜種類的數量)擴大了,準確性肯定會下降,反之亦然,這是可以理解的。所以要在兩者之間打壹個平衡點,讓機器學習模型的評估效果最好,通過“P-R曲線”找到平衡點。曲線的橫坐標是查全率,縱坐標是查準率。對機器學習結果的例子進行排序後,計算器查準率和查全率大致可以類似下圖:
根據圖4,我們知道曲線與直線相交的點就是平衡點(BEP),這裏有很多平衡點。我們壹般認為曲線下面積越大,性能越好,所以選擇最外面的。但是看到最外層和內層的曲線有交集,我們無法用肉眼判斷。此時,我們可以計算均衡點的函數值,越大代表性能越好。但書中給出了壹種更為準確的定量比較方法,即F1測量法,公式如下:
現實中我們可能對精度和召回率的關註程度不同,所以此時推導出F1度量的壹般形式,字母和公式定義如下:
其中,當=1時,退化為F1的度量,當>:1時,召回率的權重較高,當
現在我們來討論更壹般的情況。之前的測量是針對壹組混淆矩陣,現在我們將數量增加到n,解決方法非常簡單。第壹種解決方案是:通過計算精度和召回率的平均值可以得到宏精度和宏召回率,將宏F1度量帶入F1的公式中可以得到宏f 1度量。第二種方案是:先獲取真實例子等四類數據的平均值,然後帶入得到幾個宏值。
機器學習壹般的二進制分類方法是:根據模型得到壹個從0到1的數。假設閾值是0.5,大於0.5就是壹類,小於0.5就是另壹類。根據模型分類結果,我們將樣本從“最有可能”到“最不可能”排序,定義壹個分界點,將樣本分為正例和反例。分界點是這樣定義的,如果精度被賦予較高的權重,分界點將前移,如果召回被賦予較高的權重,分界點將後移。ROC是利用數據的排名結果計算學習者的泛化性能。
ROC的全稱是受試者工作特征,方法類似於P-R曲線,即繪制壹條名為“ROC圖”的曲線,以真實病例率之和(TPR)為縱坐標,陽性病例率(FPR)為橫坐標。兩個新維度定義如下:
下面是壹個示例圖,如下所示。我們希望畫壹個圖,但是因為數據是離散的,有限的,所以只能畫壹個圖b。
繪制過程如下:
①給定壹個正例,壹個反例,根據模型的預測結果進行排序。
②將分類閾值設置為最大,假設所有結果都是反例,沒有正例。當前點的坐標是(0,0)。
(3)壹次提出壹個序列並分成正例,設前壹點的坐標為。當該點是實例時,該點標記為,如果是反例,則標記為。
④重復③,直到所有點都歸為正例,即最後壹點的坐標為(1,1)。
從圖中判斷好壞的標準與P-R圖非常相似,其判斷依據是ROC曲線下面積(AUC)。它越大,性能越好。因為點都是離散的,所以我們用求和得到面積,公式如下:
設d代表數據集,+代表正例,-代表反例,然後定義排序損失如下:
它與AUC的關系是:
我們在前面幾節衡量量化的時候,把對錯的整體內部看成是相等的,也就是它們的內部權重是相等的,實際上並不是這樣。壹個西瓜識別錯誤,讓農民損失100元。對比把小偷誤放進金庫造成的幾個億的損失,我們可以看到,錯誤是有區別的,因為後果的成本不壹樣。為了度量不同的誤差,我們可以給誤差分配不同的成本,我們稱之為“不等成本”。
以第二種分類為例,根據成本思想,可以設計成本矩陣,如下圖所示:
其中cost代表成本,角標記代表矩陣的行和列的位置。壹般矩陣主對角線為0(妳對自己完全壹樣,不會付出代價)。考慮到不相等的成本,我們的目標是最小化總的錯誤成本。如果把圖6中的0類作為正例,1作為反例,那麽敏感成本誤差率的公式可以定義如下:
我們可以看到公式的變化。在原有判斷的基礎上,針對不同情況賦予不同的成本權重,因此成本會影響最終成本。
在成本不相等的情況下,ROC曲線也要發生變化,以反映真實的總體預期成本,所以這裏提出了成本曲線。橫軸為[0,1]的正費率成本,縱軸為[0,1]的歸壹化成本。它們的公式如下:
其中p代表樣本為正比率的概率。讓我們來理解這兩個公式。首先,根據圖6,只會有可能付出錯誤代價的假反例和假正例,那麽分母代表代價的總額。其次,在正例中,我們會有概率為P的假正例的可能性,和概率為p-1的假反例的可能性。所以根據正例成本的含義,第壹個公式分子代表的是假反例的總數。最後,了解歸壹化總成本。分子除了定義與正率成本相同的總成本外,還增加了不同錯誤概率的區分,所以這個公式的分子包含了兩個細節:錯誤細分的類型和錯誤細分的成本。這兩個特性就是總成本。根據公式,參照ROC中的曲線繪制方法,可以得到如下圖:
我高中的時候應該做過線性規劃。當時我用曲線方程不等式表示陰影部分來限制二維區域的範圍,成本曲線也是這樣。ROC曲線沒有壹條對應成本平面上的直線,因為這些直線是當前成本下的最大值(最壞情況),所以總成本在每條直線下面,也就是所有直線下面面積的並集就是預期總成本。通過計算比較面積,間接比較模型的性能。
有了前面的評價方法和績效衡量方法,就可以開始比較模型了。總的順序是:先用評價法,選擇合適的學習者,用表現測量法測試不同的學習結果,然後進行比較。比較不是簡單的大小比較,主要有以下幾個原因:①如何更準確地比較“泛化”性能,而不僅僅是“測試集”上的性能。?②測試集是隨機的,不同測試集的結果不壹樣。?③機器學習算法是隨機的,同樣的模型參數得到的結果會不壹樣。那麽應該如何比較呢?這壹節重點講這個,我們主要采用概率論中的假設檢驗方法。本節將介紹兩種常用的假設檢驗方法和結果常用的機器學習性能比較方法。其中設置公式符號來表示錯誤率和性能測量結果。
統計中只能計算測試錯誤率。這種方法的思想是通過測試錯誤率間接表示泛化錯誤率。假設獨立抽樣,如果測試中有m個樣本,總的測試誤差概率可以用二項分布表示如下:
給定,可以求解對的壹階偏導數方程,已知在,和時最大,對於10個樣本,求解到下圖:
通過二項式檢驗,假設置信區間在的概率內計算。
以上假設檢驗針對的是壹個模型的壹個結果,但有時我們會產生多個結果,比如使用多重預留法或交叉驗證法,此時可以使用t檢驗。假設已經測試了k個錯誤率,並假設其均值為,方差為,定義如下:
k檢驗誤差率可以看作廣義誤差率的獨立樣本。測試變量:
服從自由度為k-1的t分布,如下圖所示:
使用雙邊假設,圖中陰影部分在和之間,如果包含,則接受假設,否則拒絕假設。
有A和B兩個學習器,都是用K倍交叉驗證法,得到的錯誤率是sum,I的值是1到K,用相同的折疊位置訓練其中的壹對。那麽就可以使用“配對t檢驗”,這裏認為如果兩個學習者相同,則相同數字的錯誤率也相同。該算法的具體方法如下:
(1)、計算均值和方差。
②求變量,如果小於,接受假設,否則拒絕假設,誤差率小的模型更好。
我們之前提到過,計算泛化誤差的假設是測試誤差率是泛化誤差率的獨立樣本。而K倍交叉驗證在多次測試中明顯使用了重疊數據,使得最終計算結果高於正常值。為了解決這個問題,可以使用交叉驗證。以下是該方法的實現過程:
①做20%的交叉檢查,做5次。
②在每次2重交叉試驗前隨機打亂數據,使5次試驗的數據分布不同。
(3)設第n重得到的插值為每兩次2重交叉試驗得到壹次均值和方差。
利用三步得到的已知數據,可以求出變量T:它服從自由度為n的T分布,查表即可得到結果。
這種測試方法最適用於二元分類問題。利用擱置法,可以估計學習者AB的測試錯誤率,得到學習者分類結果的差異,並通過列聯表顯示出來。示例如下:
如果兩個學習者的表現相似,均值為1,方差為0,那麽變量t:
服從自由度為1的卡方分布,並設置顯著性為,則當變量結果小於臨界值時接受假設,否則拒絕假設。
之前的測試方法主要是針對同壹數據集比較兩個學習者的學習表現。雖然更多的算法可以成對比較,但不像弗裏德曼測試那樣直接。它基於算法排名,可以直接與多種算法進行比較。現在假設有四個數據集和三個算法ABC,那麽它的算法過程如下:
①用留出法或交叉檢查法得到每個數據集中每個算法的測試結果,填入算法比較序列值表。
②對每個數據集中每個算法的性能進行排名,賦值1,2,3等。如果兩種算法的性能相同,取平均值。該表的壹個示例如下:
③從表中判斷算法的性能是否相同。如果相同,則平均序數值相同,否則取平均值。有關示例,請參見圖11。
假設有n個數據集,比較k個算法,設置代表第I個算法的平均序數值,設置為服從正態分布,均值為,方差為,那麽變量t:
當k和n較大時,變量服從自由度為k-1的卡方分布。上述公式有些保守,改進後的公式將分布改為f分布,使結果更加準確,如下:
該變量服從自由度為k-1的F分布,常用的臨界值如下圖所示:
如果通過以上測試的對比,否定了“所有算法性能相同”的假設,則說明算法的性能存在顯著差異,要用Memenyi後續的測試做進壹步的分析。其通過下面公式計算平均序列值差的臨界值域。
下圖給出了幾個常見的值:
將上述兩種測試方法結合起來計算結果後,可以在弗裏德曼測試圖中直觀地顯示出來。從上述算法ABC的示例中獲得的結果如下所示:
圖中橫軸為平均序數值,用點表示,橫線為臨界值域。如果算法之間的水平線重疊,則兩種算法不存在先出差異,否則存在顯著差異。在圖15中,A和B重疊,所以沒有顯著差異,A和C不重疊,A的階值更高,說明算法A比算法C好,(這裏其實有壹個問題。圖中算法B和算法C重疊,說明B和C沒有顯著差異,那麽根據轉移關系,三者之間是不是沒有顯著差異呢?)& lt1 & gt;
除了評估泛化性能,我們往往還需要知道模型為什麽會呈現這樣的性能,這也是為什麽我們需要用“偏差-方差分解”的方法來解釋。其基本思想是將學習算法評估的期望泛化錯誤率進行分解。本節主要解釋它的實現。
對於測試樣本,設是數據集中的壹個真實標記,代表學習模型在訓練集d上的預測輸出,以回歸任務為例。
定義期望期望:
定義差異:
定義噪音:
預期輸出和實際標記之間的差異稱為偏差,其定義為:
為了推導方便,設=0。推導過程書很詳細也很重要。截圖如下:
因此引入了之前定義的變量:
也就是說,泛化誤差可以分解為偏差、方差和噪聲之和。
公式中,偏差表示期望結果與真實結果之間的誤差,即機器學習算法的擬合能力;方差衡量的是同壹訓練集學習績效的變化,即數據擾動造成的影響;噪音代表泛化誤差的下限,這是問題本身的學習難度。結果表明,泛化誤差由這三個因素組成。
壹般來說,偏差和誤差是矛盾的,如下圖所示(底部黑線表示偏差,頂部黑線表示泛化誤差),也就是說我們不能保證每個指標都能達到自己的最佳。當訓練程度較小時,由於欠擬合,數據預測偏差較大。此時影響泛化誤差的主要因素是偏差。當訓練程度逐漸增加,模型越來越完善,偏差會變小,方差會變大。當訓練度過大時,模型過擬合。雖然偏差很小,但是方差很大。此時影響泛化誤差的主要因素是方差。根據理論,我們應該給出的訓練度正好使泛化誤差最小。
在這壹章中,我們學習如何評估和選擇模型。首先,我們知道學習模型的學習水平不同會導致欠擬合和過擬合。然後我們學習了模型選擇方法:擱置法、K倍交叉驗證法和自助法。選好車型後,要衡量性能。本文用計算誤差來表示,提到了誤差率、精度、精確率、召回率、ROC、AUC、成本敏感誤差、成本曲線等幾種方法。算完性能,還要對比幾款。這篇論文講的是弗裏德曼測驗,梅門伊跟蹤測驗,還有?麥克內馬檢驗?交叉驗證t檢驗?比較和測試這些方法。最後,我們談到了使用偏差和方差來理解模型產生性能結果的原因。