机器学习之过拟合与欠拟合以及偏差-方差分解
1、過擬合
所謂過擬合就是:把訓練樣本自身的一些特點當作了所有潛在樣本都會具有的一般性質,這樣就會導致訓練出的模型其泛化能力降低,這就是過擬合。
如何解決?
?
1)Early stopping
?
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的次數,可以根據實際情況取,如10、20、30……
?
簡單來說就是訓練時設定一個訓練輪的次數,每一輪訓練結束后計算一次準確率,紀錄最高準確率,若又經過多輪訓練準確率不再提高,則說明原來最高準確率那輪可以提前停止修改總訓練輪數。
?
2)數據集擴增
?
通俗得講,數據機擴增即需要得到更多的符合要求的數據,即和已有的數據是獨立同分布的,或者近似獨立同分布的。一般有以下方法:
?
- 從數據源頭采集更多數據
- 復制原有數據并加上隨機噪聲
- 重采樣
- 根據當前數據集估計數據分布參數,使用該分布產生更多數據等
?
3)正則化
即在對模型的代價函數(cost function)加上正則項從而形成目標函數(objective function)。
描述正則化及其能預防過擬合原因很好的總結
http://blog.csdn.net/heyongluoyao8/article/details/49429629
加入正則化項相當于對權重系數的更新添加了約束,所以說正則化項相當于模型的先驗概率(相當于一個約束)。
參考以上網址分析L1以及L2正則化為什么能夠防止過擬合
L1正則化為什么可以防止過擬合?
L1正則(即為在代價函數后面加上L1范數組成目標函數。L1范數為求各個元素的絕對值之和)
??L1正則是基于L1范數,即在目標函數后面加上參數的L1范數和項,即參數絕對值和與參數的積項,即
???????????????????????????
其中C0代表原始的代價函數,n是樣本的個數,λ就是正則項系數,權衡正則項與C0項的比重。后面那一項即為L1正則項。?
在計算梯度時,w的梯度變為:
??????????????????????
其中,sgn是符號函數
?
其中sgn是一個符號函數,其中,梯度下降算法中,α<0,β<0,而在梯度上升算法中則相反。
從上式可以看出,當w為正時,更新后w會變小;當w為負時,更新后w會變大;因此L1正則項是為了使得那些原先處于零(即|w|≈0)附近的參數w往零移動,使得部分參數為零,從而降低模型的復雜度(模型的復雜度由參數決定。同時權重系數w≈0說明此特征和最終結果關系不大,可能是某一樣本本身的特征而不是訓練集中的數據普遍具有的特性,故不應加入整體模型的訓練中,所以把其設為0可以提高模型的泛化能力),從而防止過擬合,提高模型的泛化能力。
L2正則化為什么可以防止過擬合?
L2正則(即為在代價函數后面加上L2范數組成目標函數。L2范數為)
L2正則是基于L2范數,即在目標函數后面加上參數的L2范數和項,即參數的平方和與參數的積項,即:
??????????????????????? ? ?
其中C0代表原始的代價函數,n是樣本的個數,與L1正則化項前面的參數不同的是,L2項的參數乘了1/2,是為了便于計算以及公式的美感性,因為平方項求導有個2,λ就是正則項系數,權衡正則項與C0項的比重。后面那一項即為L2正則項。?
?
其中,梯度下降算法中,α<0,β<0,而在梯度上升算法中則相反。注意這里后的W實際是||w||即為w的L2范數
L2正則項起到使得參數w變小加劇的效果,更小的參數值w意味著模型的復雜度更低,對訓練數據的擬合剛剛好(奧卡姆剃刀),不會過分擬合訓練數據,從而使得不會過擬合,以提高模型的泛化能力。
4)Dropout
深度學習中用,隨機的使隱藏層中的節點失活
2、欠擬合
所謂欠擬合:就是模型沒有很好地捕捉到數據特征,不能夠很好地擬合數據。
如何解決?
1)添加其他特征項
有時候我們模型出現欠擬合的時候是因為特征項不夠導致的,可以添加其他特征項來很好地解決。例如,“組合”、“泛化”、“相關性”三類特征是特征添加的重要手段
2)減少正則化參數
正則化的目的是用來防止過擬合的,但是現在模型出現了欠擬合,則需要減少正則化參數。
?
3、偏差-方差分解是解釋學習算法泛化性能的一種重要工具,它試圖對學習算法的期望泛化錯誤率進行分解。
泛化誤差=偏差+方差+噪聲
一般偏差與方差是有沖突的,這稱為偏差-方差窘境。當訓練不足時,學習器的擬合能力不強,訓練數據的擾動不足以使學習器產生顯著的變化,這時候偏差較大,偏差主導了泛化錯誤率,同時會導致欠擬合。隨著訓練程度的加深,學習器的擬合能力逐漸增強,訓練數據發生的擾動逐漸能被學習器學到,方差變大,逐漸主導了泛化錯誤率,一定程度上會導致過擬合。
即為通過偏差-方差分解后,偏差主導泛化錯誤率時會導致欠擬合,方差主導泛化錯誤率時會導致過擬合。
偏差度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法本身的擬合能力;方差度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響。噪聲則表達了當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。
轉載于:https://www.cnblogs.com/dyl222/p/11000882.html
總結
以上是生活随笔為你收集整理的机器学习之过拟合与欠拟合以及偏差-方差分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32F405的 ADC参考电压选择
- 下一篇: docker 推送镜像到私有地址