[機器學習 ML NOTE]Overfitting 過度學習

在訓練的時候,經常會出現Overfitting的情況,也是就過度學習的情況,我一開始在實作的時候也遇過很多次,因此就去研究了一下,Overfitting是什麼,然後有那些常見的解決方法。 什麼是Overfitting(過度學習) Overfitting顧名思義就是過度學習訓練資料,變得無法順利去預測或分辨不是在訓練資料內的其他資料,我用個自己認知的簡單例子來表達 假設現在我要訓練一個模型可以辨識是不是貴賓狗,因此這個模型學習到貴賓的特徵:耳朵長而寬,頭較窄且長,尾巴與身體成一斜角,身體背部短之類的特徵,但因為訓練資料都給黑色的貴賓狗,所以模型過度依賴訓練資料而把黑色的特徵也學習起來了,因此在預估的時候遇到不同顏色的貴賓便會有準確度的問題,這就是過度學習。 來自wiki,藍色跟紅色為當時訓練分類器的資料,黃色為新加入要分類的資料 以上圖來看,綠線就是Overfitting的結果,黑線代表正常的分類模型,綠線雖然完全把訓練資料分類出來,但如果現在有一個新的資料進來(黃色點點),就會造成分類錯誤,因為綠色線的模型在訓練資料的準確率是非常高的,不過在新資料的分類下錯誤率變會提升,以下有個方法可以偵測是否有Overfitting的情況發生 將所有的Training data坼成二部分,一個是Training Set跟Validate Set,Training Set就是真的把資料拿去訓練的,而Validate Set就是去驗證此Model在訓練資料外的資料是否可行。(原來每個實作這樣做的原因是要去偵測Overfitting啊!!恍然大悟) 機器學習的目標就是要訓練機器擁有人類的思考,並且擁有解決一般問題的能力,即使看到沒有包含在訓練資料的資料,也是要可以正確辨識的。而且現在訓練資料越來越龐大,訓練時間越來越久的時況下,避免跟解決Overfitting是機器學習上重要一個課題。 這裡有個連結,是用scikit-learn (python的一個學習套件,之後有時間會做介紹跟實作),來implement Underfitting 跟Overfitting在Linear Regression上的情況 http://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.html 造成Overfitting的原因與解決方式 訓練資料太少 取得更多的資料 這個方法就是收集更多的資料,或是自行生成更多的有效資料(如果你生成一些跟模型無關的資料去訓練只會越來越糟 😕,所以必需確正自行生成的資料對訓練模型是有幫助) 擁有太多的參數,功能太強的模型

Read more