1. 程式人生 > 其它 >經驗誤差、測試誤差、泛化誤差及其偏差-方差分解

經驗誤差、測試誤差、泛化誤差及其偏差-方差分解

目錄

引言

  • 在構建機器學習模型時,通常需要先採集資料,然後將資料分為訓練集、驗證集、測試集。訓練集用於訓練模型,驗證集(如果資料量比較少可以採用交叉驗證的方式)用於調整超引數,測試集則用於最後評估模型的效能。通常假設所有的樣本都是獨立同分布取樣的。

經驗誤差、測試誤差、泛化誤差定義

  • 經驗誤差指模型在訓練集上的誤差,即訓練誤差
  • 測試誤差指模型在測試集上的誤差
  • 泛化誤差指模型在所有資料上的誤差(也有人說是在學習器沒見過的資料上的誤差),泛化誤差一般是求不出來的。因此,一般訓練集和測試集不交叉,以測試誤差來近似代替泛化誤差。

泛化誤差的偏差-方差分解

  • 偏差-方差分解用於衡量學習演算法的泛化能力,將學習演算法的期望泛化誤差進行分解。
    泛化誤差 = 偏差 + 方差 + 噪聲
  • 噪聲表示在當前任務上任何學習演算法所能達到的期望泛化誤差的下界,噪聲的存在意味著當前學習任務有固有的任何學習演算法都無法解決的問題,即定下了上限。即噪聲刻畫學習問題本身的難度。
  • 偏差刻畫模型本身的擬合能力,當模型欠擬合時,偏差較大,此時偏差主導了泛化誤差。Bias是所有可能的訓練資料集訓練出的所有模型輸出的平均值與真實模型的輸出值之間的差異。
  • 方差表示使用同樣大小的不同訓練集訓練所導致的模型的效能變化,刻畫了資料擾動造成的影響。方差主導泛化誤差時說明模型過擬合了,需要正則化。
  • 通常偏差和方差之間是矛盾的,需要做平衡。偏差-方差tradeoff可以讓我們更好地瞭解模型的複雜度,但實用價值比較有限,因為沒辦法真的算出來方差和偏差。

偏差-方差圖解

  • 如圖靶心是完美預測結果,即噪聲所代表的任何學習演算法在當前任務上能達到的上界。每一個數據集點都是在相同規模的不同資料集上的預測結果。
  • 當所有資料點都距離靶心很遠時偏差較大,資料點之間距離較大時偏差較大。
  • 資料點之間距離小,但是整體距離靶心很遠,此時發生了欠擬合。資料點之間距離大,但是整體都環繞在靶心周圍時發生了過擬合。資料點相互之間距離大,且都距離靶心很遠,那這種解決簡直糟透了,說明模型嚴重無法擬合數據,像是隨即亂猜吧。

偏差-方差tradeoff

  • 給定學習任務,控制學習演算法的訓練程度:
  • 當訓練不足時,學習器擬合能力不夠強,泛化誤差很大。此時訓練資料的擾動不足以使得學習器發生顯著變化(畢竟都很差),此時偏差主導了泛化誤差。
  • 隨著訓練程度的加深,學習器的擬合能力不斷加強,可以更敏銳地感知訓練資料的變化,訓練資料的擾動也會被學習器學習到,此時方差主導了泛化誤差。當某個訓練集本身的非全域性特徵被學習器學到了以後就將發生過擬合。

模型複雜度

  • 通常來說模型複雜度越高,對訓練資料有更強的擬合能力,容易導致過擬合,方差過大。模型複雜度越低,則不能很好地擬合模型,容易導致欠擬合,因為目前演算法大部分都是資料驅動的,因此要根據資料的特點正確調整模型的複雜度。

bagging和boosting

  • bagging通過取樣生成多個不同的訓練子集,訓練生成多個分類器,然後對分類器求平均,目的是降低模型的方差。bagging和random類的並行演算法都是這種效果。
  • boosting則是迭代演算法,每一輪迭代對上一輪迭代難以解決的問題進行處理,隨迭代進行誤差越來越小,不斷降低模型的偏差。

解決偏差-方差問題

  • 無法避免偏差與方差,只能減弱影響。

針對偏差:避免欠擬合

  • 尋找更好更有代表性的特徵
  • 用更多的特徵(增加模型複雜度)

針對方差:避免過擬合

  • 增大資料集,減少資料擾動的影響
  • 減少資料維度,降低模型複雜度
  • 正則化方法
  • 交叉驗證。K折交叉驗證中K越小方差越小,因為k小時每個子訓練集資料越多,就越難發生過擬合。意思是交叉驗證時分的子資料集越多偏差就越小,方差越大,此時是過擬合,原因是因為子資料集越多則每個資料集中資料量越少,可能導致相對而言模型複雜度越高。