1. 程式人生 > >從整合學習到模型的偏差和方差的理解

從整合學習到模型的偏差和方差的理解

模型的偏差和方差的權衡和討論其實是貫穿在整個機器學習理論當中的。機器學習的每一個演算法或者模型都有對這兩方面的判斷和取捨。今天在看scikit-learn文件關於整合學習的論述中又提到偏差和方差,所以我想談一談我對這兩個概念的理解。

整合學習

整合學習是一種組合型別的學習方法。它採用多個基分類器組合成一個總分類器,能夠達到單個基分類器所達不到的效果。根據將多個基分類器整合在一起的方式,整合學習主要分為兩類:

  • 平均方法:例如隨機森林, Bagging methods。在平均方法中,系統分別去建立多個基分類器,分類器之間沒有任何聯絡。然後在分類或者回歸階段,各個分類器根據測試資料給出自己的答案,然後系統根據各個分類器給出的結果去綜合出最後的結果,比如可以使投票的形式。
  • 提升方法:例如梯度提升決策樹GBDT,AdaBoost。在提升方法中,系統模型在訓練過程中會先後建立一系列分類器,這些分類器單個可能是弱分類器,但是組合起來就成為一個強分類器。

平均方法通常比其任何一個基分類器效果好因為嘗試去降低模型的方差,而提升方法嘗試去降低模型的偏差。

方差和偏差

方差和偏差的來源

我們機器學習的模型,必不可少地對資料非常依賴。然而,如果你不知道資料服從一個什麼樣的分佈,或者你沒有辦法拿到所有可能的資料(肯定拿不到所有的),那麼我們訓練出來的模型和真實模型之間,就會存在不一致。這種不一致表現在兩個方面。

  1. 真實模型根本就沒有包含在我們訓練模型的模型空間中。比如本來是非線性模型,你非要拿線性模型去擬合數據,那麼不論你怎麼調整模型引數去選擇模型,結果也是不對的。這就是偏差
    的來源。表現為模型不正確。
  2. 不管真實模型在不在我們訓練模型的空間中,由於我們不能拿到所有可能的資料,如果拿到的資料不是那麼具有代表性,那麼不同的資料訓練出來的模型引數就會不同。然後用這個模型去做預測,結果也就會和真實值之間有差異。這就是方差的來源。表現為模型不穩定。

用打靶的例子來說明。偏差好比你的瞄準能力;方差好比你使用的槍的效能。

瞄準的時候,正確的方式除了要考慮到三點一線,還要考慮到風向,子彈的速度和重力,距離的遠近等等。如果你只會三點一線,那麼就會帶來偏差,因為你能力比較弱。

而槍的效能也很重要。好的槍精度高,只要你瞄的準,他都能打到瞄準點附近非常小的範圍之內;而差的槍,比如你用彈弓,就算每次都瞄的準,但是它打到瞄準點附近的範圍變化就比較大。
這裡寫圖片描述

方差偏差與模型複雜度的關係

那麼,既然方差和偏差是這麼來的,而且看起來無法完全避免,那麼我們有什麼辦法儘量減小其影響呢?

我覺得,避免偏差的話,首先我們需要儘量選擇正確的模型,所謂“對症下藥”。我覺得有位同行把機器學習演算法的使用比作醫生開藥方,是非常不錯的比喻。我們要根據資料的分佈和特點,選擇合適的演算法。

其次,有了合適的演算法,我們還要慎重選擇資料集的大小。通常訓練資料集越大越好,但是當大到資料集已經對整體所有資料有了一定的代表性之後,再多的資料已經不能提升模型的準確性,反而帶來模型訓練的計算量增加。但是,訓練資料太少的話是一定不好的,這會帶來過擬合的問題,過擬合就是模型複雜度太高,方差很大,不同的資料集訓練出來的模型變化非常大。儘管針對資料量少的情況有一些補救措施,但這是沒有辦法的辦法。

最後,我們還要正確選擇模型的複雜度。複雜度高的模型通常對訓練資料有很好的擬合能力,但是對於測試資料就不一定了。而複雜度太低又不能很好地擬合數據。模型複雜度和模型的方差和偏差具有如下的關係。
這裡寫圖片描述

方差偏差與模型選擇

關於模型選擇的方法,有正則化的方法K折交叉驗證的方法。

正則化的方法不用多說,通過為目標優化函式加上一個正則化因子,避免模型的複雜度太高。這裡主要談一下交叉驗證。

交叉驗證的時候,模型的型別已經定了,我們需要確定模型的引數,所以影響方差偏差的因素只剩下來自資料的影響。有一個相對比較偏的理解:

  • 當K值大的時候, 我們會有更少的Bias(偏差), 更多的Variance。
  • 當K值小的時候, 我們會有更多的Bias(偏差),更少的Variance。

然後有一個還算合理的解釋,但是我自己也不能找到更好的解釋方法。

具體到K-fold Cross Validation的場景,其實是很好的理解的。首先看Variance的變化,還是舉打靶的例子。假設我把搶瞄準在10環,雖然每一次射擊都有偏差,但是這個偏差的方向是隨機的,也就是有可能向上,也有可能向下。那麼試驗次數越多,應該上下的次數越接近,那麼我們把所有射擊的目標取一個平均值,也應該離中心更加接近。

更加微觀的分析,模型的預測值與期望產生較大偏差,在模型固定的情況下,原因還是出在資料上,比如說產生了某一些異常點。在最極端情況下,我們假設只有一個點是異常的,如果只訓練一個模型,那麼這個點會對整個模型帶來影響,使得學習出的模型具有很大的variance。但是如果採用k-fold Cross Validation進行訓練,只有1個模型會受到這個異常資料的影響,而其餘k-1個模型都是正常的。在平均之後,這個異常資料的影響就大大減少了。相比之下,模型的bias是可以直接建模的,只需要保證模型在訓練樣本上訓練誤差最小就可以保證bias比較小,而要達到這個目的,就必須是用所有資料一起訓練,才能達到模型的最優解。因此,k-fold Cross Validation的目標函式破壞了前面的情形,所以模型的Bias必然要會增大。

整合學習與偏差方差

再回到開頭整合學習的兩種型別。

平均的方法採用多個分類器集體表決,就算其中一個分類器偏差較大,整體不會受其影響,偏差較小;然後,集體表決意味著模型泛化能力比較強,其分類能力相對於其中的每一個單一分類器是穩定的,所以相當於降低了方差。

提升的方法通過構造一系列的弱分類器對相同的訓練資料集的重要性區別對待達到對訓練資料的精確擬合,因此是降低了偏差。

到此為止,有了新的理解再補充。