43 為什麼要訓練資料集與測試資料集

2021-10-24 22:13:33 字數 2007 閱讀 3894

我們說它之所以過擬合,是因為雖然我們學習到的這個曲線使得我們整個樣本使用這個曲線進行**的誤差變小了,但是如果有乙個新的樣本的話,比如下圖紫色的點對應的 x

xx 座標大概是 2.5 左右,那麼根據我們的這個曲線**的結果大概是 0.5 左右,顯然可以發現這個**的結果和之前藍色的樣本點相差太大。我們直觀的就會覺得這個**值很有可能是錯誤的。換句話說,在過擬合這種場景下,雖然這條曲線將原來的樣本點擬合的非常好,總體的誤差非常的小。但是一旦來了新的樣本點,那麼它就不能進行很好的**了。

在以上情況下,我們就稱我們得到的這個模型的泛化能力是非常弱的。在這裡所謂的泛化能力,就是所謂的由此及彼的能力。也就是說我們根據我們已知的這些訓練資料得到的這條曲線,可是這條曲線在面對新的資料的時候它的能力卻非常的弱,也就是泛化能力非常的差。

到這裡,就可以想象了。我們要訓練這個模型目的不是最大程度的擬合這些點,而是為了可以獲得乙個可以**的模型,當有了新的樣本,新的資料的時候,我們的模型可以很好的給出解答。正因為如此,我們去衡量我們的這個模型對於訓練的資料的擬合程度有多好是沒有意義的。我們真正需要的是能夠衡量我們得到的這個模型的泛化能力有多好

那在這種情況下,我們應該怎麼做呢?

其實答案非常簡單,這個做法我們之前也一直在使用,就是將原始的資料集分成訓練資料集和測試資料集。而我們獲得這個模型只使用訓練資料集,而測試資料對於我們的模型來說就是全新的資料。

如果我們訓練資料獲得的模型面對測試資料也能獲得很好的結果的話。我們就說這個模型的泛化能力是很強的。因為它能通過訓練資料得到的模型很好的給出測試資料這些新的資料相應的結果。但是如果這個模型面對測試資料,它的效果很差的話,那麼這個模型的泛化能力就很弱。

下面,我們就實際的來看一下對於我們的多項式回歸來說,當我們的 deg

reedegree

degree

取不同的值的時候,我們通過訓練資料獲得的模型對於這個測試資料相應的**的誤差是怎樣變化的?

u py

tern

oteb

ookjupyter notebook

jupyte

rnot

eboo

k 接著寫:

我們在 not

eboo

knotebook

notebo

ok進行的實驗是在實驗模型的複雜度。對於多項式回歸來說,相當於我們的 deg

reedegree

degree

越大,我們的模型就會越複雜。這種情況下通常我們的機器學習演算法來說,是有這樣的乙個圖的。

對於測試資料集來說,模型越複雜,模型的準確率就越高。但是對於測試資料集來說,模型複雜度達到一定程度時,模型的準確率就又開始降低了。其實就是從欠擬合到合適再到過擬合的這個過程。其實我們真正要找的就是泛化能力最好的地方。換句話說,也就是對於我們的測試資料集來說模型的準確率最高的地方。

具體**見 42 過擬合和欠擬合.ipynb

推薦系統為什麼要分測試集與訓練集

一般來說,訓練集用來估計模型中的引數,使模型能夠反映現實,進而 未來或其他未知的資訊,而測試集用來評估模型的 效能。例如 已知1000個小朋友的體重和身高資料,想建立體重與身高的線性回歸模型。我們可以用900個小朋友的身高和體重資料 訓練集 來擬合模型中的引數,進而 另外100個小朋友的體重 已知身...

python為什麼要學資料結構與演算法

如果 a b c 1000,且 a 2 b 2 c 2 a,b,c 為自然數 如何求出所有a b c可能的組合?import time start time time.time 注意是三重迴圈 for a in range 0,1001 for b in range 0,1001 for c in ...

資料結構與演算法 01 為什麼要學資料結構與演算法

從今天起,我打算寫乙個系列,關於資料結構與演算法.這篇文章,算是乙個開篇之詞吧.資料結構與演算法,作業系統,計算機組成原理,還有計算機網路,這些內容在實際工作中你用到了多少?是不是除了面試的時候會問到,好像寫 的時候,也沒怎麼用,對吧?況且就算用到,我只要會呼叫 j a api 開發框架用的相當熟練...