您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Python中pytorch模型選擇及欠擬合和過擬合的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
訓練誤差是指,我們的模型在訓練數據集上計算得到的誤差。
泛化誤差是指,我們將模型應用在同樣從原始樣本的分布中抽取的無限多的數據樣本時,我們模型誤差的期望。
在實際中,我們只能通過將模型應用于一個獨立的測試集來估計泛化誤差,該測試集由隨機選取的、未曾在訓練集中出現的數據樣本構成。
在本節中將重點介紹幾個傾向于影響模型泛化的因素:
可調整參數的數量。當可調整參數的數量(有時稱為自由度)很大時,模型往往更容易過擬合。參數采用的值。當權重的取值范圍較大時,模型可能更容易過擬合。訓練樣本的數量。即使模型非常簡單,也很容易過擬合只包含一兩個樣本的數據集。而過擬合一個有數百萬個樣本的數據集則需要一個極其靈活的模型。 模型選擇
在機器學習中,我們通常在評估幾個候選模型后選擇最終的模型。這個過程叫做模型的選擇。有時,需要進行比較的模型在本質上是完全不同的(比如,決策樹與線性模型)。又有時,我們需要比較不同的超參數設置下的同一類模型。
例如,訓練多層感知機模型時,我們可能希望比較具有不同數量的隱藏層、不同數量的隱藏單元以及不同的激活函數組合的模型。為了確定候選模型的最佳模型,我們通常會使用驗證集。
原則上,在我們確定所有的超參數之前,我們不應該用到測試集。如果我們在模型選擇過程中使用了測試數據,可能會有過擬合測試數據的風險。
如果我們過擬合了訓練數據,還有在測試數據上的評估來判斷過擬合。
但是如果我們過擬合了測試數據,我們又應該怎么知道呢?
我們不能依靠測試數據進行模型選擇。也不能僅僅依靠訓練數據來選擇模型,因為我們無法估計訓練數據的泛化誤差。
解決此問題的常見做法是將我們的數據分成三份,除了訓練和測試數據集之外,還增加一個驗證數據集(validation dataset),也叫驗證集(validation set)。
但現實是,驗證數據和測試數據之間的界限非常模糊。在之后實際上是使用應該被正確地稱為訓練數據和驗證數據的東西,并沒有真正的測試數據集。因此,之后的準確度都是驗證集準確度,而不是測試集準確度。
當訓練數據稀缺時,我們甚至可能無法提供足夠的數據來構成一個合適的驗證集。這個問題的一個流行的解決方案是采用 K K K折交叉驗證。這里,原始訓練數據被分成 K個不重疊的子集。然后執行K次模型訓練和驗證,每次在K?1個子集上進行訓練,并在剩余的一個子集(在該輪中沒有用于訓練的子集)上進行驗證。最后,通過K次實驗的結果取平均來估計訓練和驗證誤差。
當我們比較訓練和驗證誤差時,我們要注意兩種常見的情況。
首先,我們要注意這樣的情況:訓練誤差和驗證誤差都很嚴重,但它們之間僅有一點差距。如果模型不能降低訓練誤差,這可能意味著我們的模型過于簡單(即表達能力不足),無法捕獲我們試圖學習的模式。此外,由于我們的訓練和驗證誤差之間的泛化誤差很小,我們有理由相信可以用一個更復雜的模型降低訓練誤差。這種現象被稱為欠擬合。
另一方面,當我們的訓練誤差明顯低于驗證誤差時要小心,這表明嚴重的過擬合。注意,過擬合并不總是一件壞事。
我們是否過擬合或欠擬合可能取決于模型的復雜性和可用數據集的大小,這兩個點將在下面進行討論。
告誡多項式函數比低階多項式函數復雜得多。高階多項式的參數較多,模型函數的選擇范圍較廣。因此在固定訓練數據集的情況下,高階多項式函數相對于低階多項式的訓練誤差應該始終更低(最壞也是相等)。事實上,當數據樣本包含了 x的不同取值時,函數階數等于數據樣本數量的多項式函數可以完美擬合訓練集。在下圖中,我們直觀地描述了多項式的階數和欠擬合與過擬合之間的關系。
訓練數據集中的樣本越少,我們就越可能(且更嚴重地)遇到過擬合。隨著訓練數據量的增加,泛化誤差通常會減小。此外,一般來說,更多的數據不會有什么壞處。
以上就是Python中pytorch模型選擇及欠擬合和過擬合的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。