Python機器學習pytorch模型選擇及欠擬合和過擬合詳解
訓練誤差和泛化誤差
訓練誤差是指,我們的模型在訓練數(shù)據(jù)集上計算得到的誤差。
泛化誤差是指,我們將模型應(yīng)用在同樣從原始樣本的分布中抽取的無限多的數(shù)據(jù)樣本時,我們模型誤差的期望。
在實際中,我們只能通過將模型應(yīng)用于一個獨立的測試集來估計泛化誤差,該測試集由隨機選取的、未曾在訓練集中出現(xiàn)的數(shù)據(jù)樣本構(gòu)成。
模型復(fù)雜性
在本節(jié)中將重點介紹幾個傾向于影響模型泛化的因素:
可調(diào)整參數(shù)的數(shù)量。當可調(diào)整參數(shù)的數(shù)量(有時稱為自由度)很大時,模型往往更容易過擬合。參數(shù)采用的值。當權(quán)重的取值范圍較大時,模型可能更容易過擬合。訓練樣本的數(shù)量。即使模型非常簡單,也很容易過擬合只包含一兩個樣本的數(shù)據(jù)集。而過擬合一個有數(shù)百萬個樣本的數(shù)據(jù)集則需要一個極其靈活的模型。
模型選擇
在機器學習中,我們通常在評估幾個候選模型后選擇最終的模型。這個過程叫做模型的選擇。有時,需要進行比較的模型在本質(zhì)上是完全不同的(比如,決策樹與線性模型)。又有時,我們需要比較不同的超參數(shù)設(shè)置下的同一類模型。
例如,訓練多層感知機模型時,我們可能希望比較具有不同數(shù)量的隱藏層、不同數(shù)量的隱藏單元以及不同的激活函數(shù)組合的模型。為了確定候選模型的最佳模型,我們通常會使用驗證集。
驗證集
原則上,在我們確定所有的超參數(shù)之前,我們不應(yīng)該用到測試集。如果我們在模型選擇過程中使用了測試數(shù)據(jù),可能會有過擬合測試數(shù)據(jù)的風險。
如果我們過擬合了訓練數(shù)據(jù),還有在測試數(shù)據(jù)上的評估來判斷過擬合。
但是如果我們過擬合了測試數(shù)據(jù),我們又應(yīng)該怎么知道呢?
我們不能依靠測試數(shù)據(jù)進行模型選擇。也不能僅僅依靠訓練數(shù)據(jù)來選擇模型,因為我們無法估計訓練數(shù)據(jù)的泛化誤差。
解決此問題的常見做法是將我們的數(shù)據(jù)分成三份,除了訓練和測試數(shù)據(jù)集之外,還增加一個驗證數(shù)據(jù)集(validation dataset),也叫驗證集(validation set)。
但現(xiàn)實是,驗證數(shù)據(jù)和測試數(shù)據(jù)之間的界限非常模糊。在之后實際上是使用應(yīng)該被正確地稱為訓練數(shù)據(jù)和驗證數(shù)據(jù)的東西,并沒有真正的測試數(shù)據(jù)集。因此,之后的準確度都是驗證集準確度,而不是測試集準確度。
K折交叉驗證
當訓練數(shù)據(jù)稀缺時,我們甚至可能無法提供足夠的數(shù)據(jù)來構(gòu)成一個合適的驗證集。這個問題的一個流行的解決方案是采用 K K K折交叉驗證。這里,原始訓練數(shù)據(jù)被分成 K個不重疊的子集。然后執(zhí)行K次模型訓練和驗證,每次在K−1個子集上進行訓練,并在剩余的一個子集(在該輪中沒有用于訓練的子集)上進行驗證。最后,通過K次實驗的結(jié)果取平均來估計訓練和驗證誤差。
欠擬合還是過擬合?
當我們比較訓練和驗證誤差時,我們要注意兩種常見的情況。
首先,我們要注意這樣的情況:訓練誤差和驗證誤差都很嚴重,但它們之間僅有一點差距。如果模型不能降低訓練誤差,這可能意味著我們的模型過于簡單(即表達能力不足),無法捕獲我們試圖學習的模式。此外,由于我們的訓練和驗證誤差之間的泛化誤差很小,我們有理由相信可以用一個更復(fù)雜的模型降低訓練誤差。這種現(xiàn)象被稱為欠擬合。
另一方面,當我們的訓練誤差明顯低于驗證誤差時要小心,這表明嚴重的過擬合。注意,過擬合并不總是一件壞事。
我們是否過擬合或欠擬合可能取決于模型的復(fù)雜性和可用數(shù)據(jù)集的大小,這兩個點將在下面進行討論。
模型復(fù)雜性
告誡多項式函數(shù)比低階多項式函數(shù)復(fù)雜得多。高階多項式的參數(shù)較多,模型函數(shù)的選擇范圍較廣。因此在固定訓練數(shù)據(jù)集的情況下,高階多項式函數(shù)相對于低階多項式的訓練誤差應(yīng)該始終更低(最壞也是相等)。事實上,當數(shù)據(jù)樣本包含了 x的不同取值時,函數(shù)階數(shù)等于數(shù)據(jù)樣本數(shù)量的多項式函數(shù)可以完美擬合訓練集。在下圖中,我們直觀地描述了多項式的階數(shù)和欠擬合與過擬合之間的關(guān)系。
數(shù)據(jù)集大小
訓練數(shù)據(jù)集中的樣本越少,我們就越可能(且更嚴重地)遇到過擬合。隨著訓練數(shù)據(jù)量的增加,泛化誤差通常會減小。此外,一般來說,更多的數(shù)據(jù)不會有什么壞處。
以上就是Python機器學習pytorch模型選擇及欠擬合和過擬合詳解的詳細內(nèi)容,更多關(guān)于pytorch模型選擇及欠擬合和過擬合的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python基于Tkinter的HelloWorld入門實例
這篇文章主要介紹了Python基于Tkinter的HelloWorld入門實例,以一個簡單實例分析了Python中Tkinter模塊的使用技巧,需要的朋友可以參考下2015-06-06Python實現(xiàn)求取表格文件某個區(qū)域內(nèi)單元格的最大值
這篇文章主要介紹基于Python語言,基于Excel表格文件內(nèi)某一列的數(shù)據(jù),計算這一列數(shù)據(jù)在每一個指定數(shù)量的行的范圍內(nèi)(例如每一個4行的范圍內(nèi))的區(qū)間最大值的方法,需要的朋友可以參考下2023-08-08opencv調(diào)用yolov3模型深度學習目標檢測實例詳解
這篇文章主要為大家介紹了opencv調(diào)用yolov3模型深度學習目標檢測實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11基于OpenCV實現(xiàn)小型的圖像數(shù)據(jù)庫檢索功能
下面就使用VLAD表示圖像,實現(xiàn)一個小型的圖像數(shù)據(jù)庫的檢索程序。下面實現(xiàn)需要的功能模塊,分步驟給大家介紹的非常詳細,對OpenCV圖像數(shù)據(jù)庫檢索功能感興趣的朋友跟隨小編一起看看吧2021-12-12python人工智能算法之人工神經(jīng)網(wǎng)絡(luò)
這篇文章主要為大家介紹了python人工智能算法之人工神經(jīng)網(wǎng)絡(luò)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03