博客摘自:算法
http://blog.csdn.net/heyongluoyao8/article/details/49429629網絡
http://lbingkuai.iteye.com/blog/1666181數據結構
使用數據挖掘或者機器學習創建模型的目的:使用已經產生的(假設的獨立同分布的)數據去訓練,而後使用訓練好的模型去擬合將來的數據分佈。然而現實生活中的數據獨立同分布的假設每每不成立。而且在數據量少的狀況下,不足以對整個數據集的分佈進行估計。所以,在實際應用中,一般會加入一些手段,防止訓練模型過擬合,提升模型的泛化能力。機器學習
過擬合: 爲了獲得一致假設而使假設變得過分複雜稱爲過擬合。函數
圖像表示:學習
緣由:一個過擬合的模型試圖連偏差(噪音)都去解釋(而實際上噪音又是不須要解釋的),致使泛化能力比較差,顯然就過猶不及了。優化
另是一種解釋:spa
在對模型進行訓練時,有可能遇到訓練數據不夠,即訓練數據沒法對整個數據的分佈進行估計的時候,或者在對模型進行過分訓練(overtraining)時,常 常會致使模型的過擬合(overfitting)。以下圖所示:
經過上圖能夠看出,隨着模型訓練的進行,(polynomial: 多項式) 模型的複雜度會增長,此時模型在訓練數據集上的訓練偏差會逐漸減少,可是在模型的複雜度達到必定程度時,模型在驗證集上的偏差反而隨着模型的複雜度增長而增大。此時便發生了過擬合,即模型的複雜度升高,可是該模型在除訓練集以外的數據集上卻不work。.net
手段:blog
對模型進行訓練的過程便是對模型的參數進行學習更新的過程,這個參數學習的過程每每會用到一些迭代方法,如梯度降低(Gradient descent)學習算法。Early stopping即是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練數據集迭代收斂以前中止迭代來防止過擬合。
Early stopping方法的具體作法是,在每個Epoch結束時(一個Epoch集爲對全部的訓練數據的一輪遍歷)計算validation data的accuracy,當accuracy再也不提升時,就中止訓練。這種作法很符合直觀感覺,由於accurary都再也不提升了,在繼續訓練也是無益的,只會提升訓練的時間。那麼該作法的一個重點即是怎樣才認爲validation accurary再也不提升了呢?並非說validation accuracy一降下來便認爲再也不提升了,由於可能通過這個Epoch後,accuracy下降了,可是隨後的Epoch又讓accuracy又上去了,因此不能根據一兩次的連續下降就判斷再也不提升。
通常的作法是,在訓練的過程當中,記錄到目前爲止最好的validation accuracy,當連續10次Epoch(或者更屢次)沒達到最佳accuracy時,則能夠認爲accuracy再也不提升了。此時即可以中止迭代了(Early Stopping)。這種策略也稱爲「No-improvement-in-n」,n即Epoch的次數,能夠根據實際狀況取,如十、20、30……
在數據挖掘領域流行着這樣的一句話,「有時候每每擁有更多的數據賽過一個好的模型」。由於咱們在使用訓練數據訓練模型,經過這個模型對未來的數據進行擬合,而在這之間又一個假設即是,訓練數據與未來的數據是獨立同分布的。便是使用當前的訓練數據來對未來的數據進行估計與模擬,而更多的數據每每估計與模擬地更準確。
所以,更多的數據有時候更優秀。可是每每條件有限,如人力物力財力的不足,而不能收集到更多的數據,如在進行分類的任務中,須要對數據進行打標,而且不少狀況下都是人工得進行打標,所以一旦須要打標的數據量過多,就會致使效率低下以及可能出錯的狀況。因此,每每在這時候,須要採起一些計算的方式與策略在已有的數據集上進行手腳,以獲得更多的數據。
通俗得講,數據機擴增即須要獲得更多的符合要求的數據,即和已有的數據是獨立同分布的,或者近似獨立同分布的。通常有如下方法:
正則化方法是指在進行目標函數或代價函數優化時,在目標函數或代價函數後面加上一個正則項,通常有L1正則與L2正則等。
具體的能夠參考:
http://blog.csdn.net/heyongluoyao8/article/details/49429629
正則是經過在代價函數後面加上正則項來防止模型過擬合的。而在神經網絡中,有一種方法是經過修改神經網絡自己結構來實現的,其名爲Dropout。該方法是在對網絡進行訓練時用一種技巧(trick),對於以下所示的三層人工神經網絡:
對於上圖所示的網絡,在訓練開始時,隨機得刪除一些(能夠設定爲一半,也能夠爲1/3,1/4等)隱藏層神經元,即認爲這些神經元不存在,同時保持輸入層與輸出層神經元的個數不變,這樣便獲得以下的ANN:
而後按照BP學習算法對ANN中的參數進行學習更新(虛線鏈接的單元不更新,由於認爲這些神經元被臨時刪除了)。這樣一次迭代更新便完成了。下一次迭代中,一樣隨機刪除一些神經元,與上次不同,作隨機選擇。這樣一直進行瑕疵,直至訓練結束。