训练集 验证集_训练与验证、测试集数据分布不同的情况
生活随笔
收集整理的這篇文章主要介紹了
训练集 验证集_训练与验证、测试集数据分布不同的情况
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在不同分布的數據集上進行訓練與驗證、測試
深度學習需要大量的數據,但是有時我們可獲得的滿足我們真實需求分布的數據并不是那么多,不足以對我們的模型進行訓練。這時我們就會收集大量相關的數據加入到訓練集中,即使有些數據,甚至是大部分數據的分布都與驗證集、測試集的數據分布不同。我們以一個例子理解一下為什么我們會這么做:依舊假設我們在建設一個貓分類網站,我們有兩種,一種是我們目標分布,也就是我們用戶上傳的,不是那么專業的,甚至還有些比較模糊的貓圖片;一種是我們網絡上爬取的清晰的,專業的貓圖片。這兩種數據分布明顯不同,但是問題是,我們從用戶那里獲取到的訓練數據是有限的,只有10000個左右,而這并不足以對我們的模型進行足夠好的訓練,訓練集較少還容易發生過擬合;我們能從網絡中爬取到的圖片有200000份,這個數量足以對我們的模型進行訓練。那么我們該如何做,使用我們從用戶中僅能獲取的10000個數據,將我們的模型訓練得足夠好呢?我們可以使用200000張從網頁爬取的圖片加上我們從用戶那里收集到的5000張圖片作為訓練集,剩余的5000張從用戶那里獲取的圖片分為驗證集與測試集。這樣劃分我們數據集的好處就在于,現在我們驗證與測試的目標就是我們實際想要處理的目標;缺點當然就在于我們的訓練集與驗證集、測試集分布不同。但事實證明,這樣的劃分在長期能給我們帶來更好的系統性能。數據分布不匹配時的偏差與方差
我們在之前了解到,分析偏差與方差,可以幫助我們確定下一步模型改進的方向。但是,當我們的訓練集與驗證集、測試集數據分布不同時,分析偏差和方差的方式可能與之前有所不同。我們還是以貓分類器為例:人類在分類圖片時的準確率很高,所以我們可以假設人類錯誤率近似為0,也就是貝葉斯錯誤率近似為0。假設我們的訓練集錯誤率為1%,驗證集錯誤率為10%,如果我們的訓練集和驗證集分布相同的話,我們就可以認為模型的泛化性能不是很好,存在方差問題。但是兩者分布不同的時候,我們就不能輕易下這個結論,因為可能這時我們的訓練集數據非常清晰,很容易識別,但是我們的驗證集因為用的是用戶來源的圖片,較為模糊,相比訓練集要難識別得多。所以這時也許我們的模型并沒有方差問題,只是由于數據變得更加難以準確分類導致的。為了解決這個問題,我們會從訓練集中分出一部分,稱為訓練-驗證集(training-devset)這一部分數據并不參與訓練,也不用于調整模型代價函數,而是用于確定是否存在方差問題。由于是從訓練集中隨機抽取出來的,所以訓練-驗證集與訓練集數據分布相同。同理,此時我們的驗證集和測試集數據分布也相同,這樣一來,我們就可以比較模型在這幾個數據集中運行的結果,從而確定我們的模型是否存在問題了。如果我們的訓練集錯誤是1%,而訓練-驗證集錯誤率是9%,驗證集錯誤率是10%,我們就可以確定,我們的模型真的存在方差問題,也就是泛化性能不夠好。但如果我們的訓練-驗證集錯誤率只有1.5%,則說明我們的模型不存在方差問題,錯誤率上升的原因是數據不匹配(data mismatch)的問題。如果我們的訓練集錯誤率為10%,而人類錯誤率為0%,我們就可以知道模型存在很大的偏差問題,或者說是還有很大的可避免偏差。此時如果驗證集錯誤率為20%,訓練-驗證集錯誤率為11%,我們就知道這個模型還存在數據不匹配的問題。而我們驗證集錯誤率與測試集錯誤率之間的差異則說明我們的模型對驗證集過擬合的程度,差異越大,越有可能過擬合。數據不匹配問題的處理
如果我們的錯誤率顯示出我們的模型存在數據不匹配的問題,我們該如何處理?這個問題沒有系統的解決方案,但我們可以進行如下嘗試:人工對數據進行檢測,嘗試了解訓練集與驗證/測試集的具體差異,為了防止對驗證集過擬合,我們需要去看驗證集而不是測試集,避免過擬合時無法被測試集檢測出。比如我們做一個語音檢測的模型,我們人工檢測一下驗證集和訓練集的差異,發現驗證集樣本噪音很多,加入了一些環境噪音。這時我們就可以收集更多的有這些噪音的數據加入訓練集,也就是收集與驗證集類似的數據。我們也可以模擬驗證集中的噪音加入訓練集。當我們發現語音檢測更難檢測到數字時,我們就可以增加訓練集中人們讀出數字的數據。總之,我們首先人工找出訓練集與驗證集的數據差異,并且針對我們找出的差異,通過對訓練集增加相似數據或者人為添加噪音的方式來模擬驗證集。Reference
深度學習課程 --吳恩達
總結
以上是生活随笔為你收集整理的训练集 验证集_训练与验证、测试集数据分布不同的情况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017.12.26
- 下一篇: centos6 dns转发_CentOS