欠擬合在【訓練集】和【測試集】上的效能都較差;
過擬合往往能較好地學習【訓練集資料】的性質,而在【測試集】上的效能較差。
在神經網路訓練的過程中,欠擬合主要表現為輸出結果的高偏差,而過擬合主要表現為輸出結果的高方差。
「欠擬合」常常在模型學習能力較弱,而資料複雜度較高的情況出現,此時模型由於學習能力不足,無法學習到資料集中的「一般規律」,因而導致泛化能力弱。
與之相反,「過擬合」常常在模型學習能力過強的情況中出現,此時的模型學習能力太強,以至於將訓練集單個樣本自身的特點都能捕捉到,並將其認為是「一般規律」,同樣這種情況也會導致模型泛化能力下降。
參考:(1)欠擬合解決方法:
1)新增其他特徵項,有時候我們模型出現欠擬合的時候是因為特徵項不夠導致的,可以新增其他特徵項來很好地解決。例如,「組合」、「泛化」、「相關性」三類特徵是特徵新增的重要手段,無論在什麼場景,都可以照葫蘆畫瓢,總會得到意想不到的效果。除上面的特徵之外,「上下文特徵」、「平台特徵」等等,都可以作為特徵新增的首選項。
2)新增多項式特徵,這個在機器學習演算法裡面用的很普遍,例如將線性模型通過新增二次項或者三次項使模型泛化能力更強。例如上面的的例子。
3)減少正則化引數,正則化的目的是用來防止過擬合的,但是現在模型出現了欠擬合,則需要減少正則化引數。
(2)過擬合解決方法:
1)重新清洗資料,導致過擬合的乙個原因也有可能是資料不純導致的,如果出現了過擬合就需要我們重新清洗資料。
2)增大資料的訓練量,還有乙個原因就是我們用於訓練的資料量太小導致的,訓練資料佔總資料的比例過小。
3)採用正則化方法。正則化方法包括l0正則、l1正則和l2正則,而正則一般是在目標函式之後加上對於的範數。但是在機器學習中一般使用l2正則,下面看具體的原因。
l0範數是指向量中非0的元素的個數。l1範數是指向量中各個元素絕對值之和,也叫「稀疏規則運算元」(lasso regularization)。兩者都可以實現稀疏性,既然l0可以實現稀疏,為什麼不用l0,而要用l1呢?個人理解一是因為l0範數很難優化求解(np難問題),二是l1範數是l0範數的最優凸近似,而且它比l0範數要容易優化求解。所以大家才把目光和萬千寵愛轉於l1範數。
l2範數是指向量各元素的平方和然後求平方根。可以使得w的每個元素都很小,都接近於0,但與l1範數不同,它不會讓它等於0,而是接近於0。l2正則項起到使得引數w變小加劇的效果,但是為什麼可以防止過擬合呢?乙個通俗的理解便是:更小的引數值w意味著模型的複雜度更低,對訓練資料的擬合剛剛好(奧卡姆剃刀),不會過分擬合訓練資料,從而使得不會過擬合,以提高模型的泛化能力。還有就是看到有人說l2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題(具體這兒我也不是太理解)。
4)採用dropout方法。這個方法在神經網路裡面很常用。dropout方法是imagenet中提出的一種方法,通俗一點講就是dropout方法在訓練的時候讓神經元以一定的概率不工作
5)採用early stopping方法。在訓練集上進行訓練,並且在驗證集上獲取測試結果(比如每隔5個epoch測試一下),隨著epoch的增加,如果在驗證集上發現測試誤差上公升,則停止訓練; 將停止之後的權重作為網路的最終引數。
深度學習(七) 過擬合欠擬合
整體 從標準正態分佈中隨機抽取資料組成張量,形狀由sizes定義 函式原型 torch.randn sizes,out none 應用 features torch.randn n train n test,1 生成200 1的張量在給定維度上對輸入的張量序列seq進行連線操作。0為行,1為列。對輸...
過擬合與欠擬合(動手學深度學習)
方法 權重衰減等價於 l2 範數正則化 regularization 正則化通過為模型損失函式新增懲罰項使學出的模型引數值較小,是應對過擬合的常用手段。l2 範數正則化 regularization l2 範數正則化在模型原損失函式基礎上新增 l2 範數懲罰項,從而得到訓練所需要最小化的函式。l2 ...
欠擬合與過擬合
在用機器學習搭建模型時,經常會碰到這樣一種情況,你的模型演算法在樣本資料中匹配的非常完美。但用新資料測試,發現模型結果和實際差距非常大。那麼恭喜你!你掉進了機器學習中常見的乙個大坑 過擬合。什麼是過擬合呢?機器學習本質上是通過建立資料模型,使其和現有資料相吻合,從而找到資料中內在的規律。如下面三張圖...