天天看點

從內建學習到模型的偏差和方差的了解內建學習方差和偏差內建學習與偏差方差

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

內建學習

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

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

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

方差和偏差

關于方差和偏差的讨論網上已經有很多,這裡給出幾個:

http://www.zhihu.com/question/27068705

http://www.cnblogs.com/LeftNotEasy/archive/2010/12/19/mathmatic_in_machine_learning_2_regression_and_bias_variance_trade_off.html

這裡我隻是談一下我的了解。

方差和偏差的來源

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

  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必然要會增大。

內建學習與偏差方差

再回到開頭內建學習的兩種類型。

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

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

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

繼續閱讀