機器學習的效果如何得看他的泛化能力咋樣,學的不咋的,又可以分為:underfitting,即在看過的資料集上就沒有做好,這時候可以增加hypothesis 模型複雜度,通過feature transform增加dvc。overfitting,即在看多的訓練集上表現的很好,計算的hypothesis完全符合看過的資料點,但是Eout不好。與underfitting不同,overfitting的成因很多,是以可使用改進的方法也很多!

一、overfitting 成因
先來看一個奇怪的現象:即便目标函數是高階的,使用一個高階的hypothesis學習效果卻不如低階hypothesis,這裡的原因是資料點太少了,無法刻畫出真實的hypothesis變化。資料集不夠大,低階的hypothesis反而更好!
假設資料通過目标函數和噪聲産生,考慮噪聲、目标函數複雜性、資料集大小對泛化能力影響:
選取二階和十階的hypothesis,先判斷資料集大小和噪聲強弱對泛化能力的影響,已知目标函數為20階,衡量标準為10階多項式和2階多項式誤差內插補點:
判斷目标函數的複雜度(樣本資料跳躍性更大仿佛有噪聲幹擾)和資料集大小對泛化能力影響,這裡的衡量标準依舊是标準為10階多項式和2階多項式誤差內插補點:在最下面,此時目标函數的複雜性不高,但是使用10階多項式易産生過拟合,與上面的分析類似,當資料量少,目标函數複雜度高時,均易産生過拟合:
總結來說:資料量少,采取hypothesis模型複雜度過高,目标函數很複雜時,均易産生過拟合!
deterministic Noise是最優hypothesis和target function之間的差距(圖中灰色部分),determinstic Noise 總是存在的,因為hypothesis 不可能完美的拟合target function。為了縮小deterministic,當我們得知target不是那麼複雜時,選用的hypothesis 也應該盡可能簡單。
二、如何解決overfitting
避免hypothesis set的vc dimension過大,那麼從簡單的hypothesis set開始做起!
避免Noise 的影響,對應就有data cleaning(修正錯誤資料點) 或是data pruning (剔除錯誤資料點)!比如可利用k-means方法,找出離群點,進一步修正或是剔除!
避免資料量太少,可以做data hinting!利用已有的資料做一些變化(平移旋轉),得到virtual example(與原有資料差别不要太大,防止破壞資料disturbtion) !
當發現hypothesis 的複雜度已經過大時,可使用regularization!
以及使用validation 時刻關注拟合狀況!
總結: