當你的假設函數有很低的“訓練錯誤”(training error)的時候,它不一定是個好的假設函數
如
\[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2} + {\theta _3}{x^3} + {\theta _4}{x^4}\]
這種現象稱為“過擬合”(overfit),這種情況會對新的數據產生較大的誤差
如何檢查假設函數?
如果可以將假設函數畫出來就可以比較直觀的看出它的問題了,但是如果特征較多就無法畫出來。
通常的做法是:
假設有如下數據集
Size | Price |
2104 | 400 |
1600 | 330 |
2400 | 369 |
1416 | 232 |
3000 | 540 |
1985 | 300 |
1534 | 315 |
1427 | 199 |
1380 | 212 |
1494 | 243 |
現在又10組數據,選取其中7個作為訓練集(training set),剩下的三個作為測試集(test set)。一般情況下選取數據的70%作為訓練集,30%作為測試集。
接下來對算法(比如線性回歸)進行訓練和測試
- 運用訓練集學習得到參數θ(通過最小化代價函數J(θ))
- 計算測試集誤差Jtest(θ)
- 對於分類問題可以定義err(hθ(x), y),定義測試誤差(test error)為所有測試樣本誤差的平均值
\[err\left( {{h_\theta }\left( x \right),y} \right) = \left\{ {\begin{array}{*{20}{c}}
1如果h(x)≥0.5,y=0或者h(x)<0.5,y=1\\
0如果h(x)<0.5,y=0或者h(x)≥0.5,y=1
\end{array}} \right.\]
\[Testerror = \frac{1}{{{m_{test}}}}\sum\limits_{i = 1}^{{m_{test}}} {err\left( {{h_\theta }\left( {x_{test}^{\left( i \right)}} \right),y_{test}^{\left( i \right)}} \right)} \]