當模型不能夠準確地表達輸入與輸出的關系時,就是欠擬合。它在訓練集和未見過的數據都會產生高誤差率。過度擬合則在訓練集表現出低誤差率,只有對未見過的數據表現出高誤差率。
當模型太過于簡單時,它需要更多的訓練時間、更多的輸入特征、更少的正則化,此時欠擬合就可能會發生。當模型太過于復雜,隨著更多的訓練時間、更多的輸入特征、更少的正則化處理,過度擬合就可能會發生。
欠擬合和過度擬合一樣,不能夠在數據中建立主導趨勢,導致模型訓練錯誤、性能低。模型當然就也很難很好地泛化到其他新的數據上(如果一個模型沒有泛化的能力,那么這個模型幾乎是沒有用的)。這樣的模型也就不能夠用來做分類或預測的任務。
我們以前也提到過,高偏差和低方差是模型出現欠擬合的信號。低偏差、高方差則是出現過度擬合的信號。高偏差、低方差在訓練數據集中就可以看出來,所以欠擬合比過度擬合好發現。當模型被過度訓練或者太復雜,在測試數據集中就會體現出高誤差率。 一般來說,過度擬合比欠擬合常見。有時,我們為了避免過度訓練模型導致過度擬合,會提前停止模型訓練,但是這個提前有時太早了,反而在這個情況下導致了欠擬合的問題。這里也引出另一種情況也會導致欠擬合,那就是訓練不足,解決之道就是增加訓練時間,這個又要考慮如何避免訓練時間太長造成過度擬合的問題。訓練時間的把握就是要權衡好這兩者。
模型太簡單,也會導致欠擬合,解決之道就是增加相關特征的輸入。特征太少的話,在現實世界中,可能會對應很多可能的輸出,這樣的模型就像在胡說八道,實際上,是我們自己想得太簡單了,增加相關的特征輸入,就可以收窄這扇——更容易定位到我們期望的結果上。注意,如果增加太多長特征輸入,又增加了模型過度擬合的可能性,造成模型低偏差、高方差。所以我們訓練模型時,總要在欠擬合和過度擬之間找一個平衡點,就是要我們根據需求來權衡。這就是所謂的偏差方差平衡(bias-variance tradeoff)。
有一些機器學習模型更加容易出現過度擬合的問題,如決策樹、KNN。要識別出過度擬合會比識別欠擬合更困難些。過度擬合在訓練數據集就表現出高準確性,為了更好地評價模型是否真的有這些高的準確性,通常使用k-folds交叉驗證。
在k-folds交叉驗證中,數據集會被分成k個大小相關的子集(fold),接著把第一個子集充當測試集(驗證集、留出集、抵抗組),剩下的數據都用作訓練。然后,由二個子集充當測試集,剩下的數據都用作訓練。依次類推,直到這k個子集都做過一次測試集為止。每一交迭代都會得到一個關于模型準確性的分數,當迭代完所有子集,將所得的分數取平均值,將其作為評價模型準確性的最終分數。我們可以根據這個分數,了解我們的模型的擬合情況。