RT


這種現象乍一看不怎麼符合常理,其實並不算罕見,主要問題在於訓練集和測試集的分布差異可能比較大。

用生活中的例子來類比,平時做卷子的平均得分比正式考試時的的得分要低。這種現象其實很常見,最可能的解釋是老師在不能準確估計正式考試難度的情況下,或者考慮到正式考試時因為緊張等原因可能不如平時發揮得好的情況下,平時給學生做的卷子難度偏高。

所以機器學習中常用的做法是從同一個數據集中隨機選取一定比例的樣本作為測試集,剩下的作為訓練集。這就是為了避免訓練集和測試集分布不同的問題。

如果我們假設平時出的卷子和正式考試的卷子都是從一個題庫里隨機抽題編製而成的,仍然出現了平時做卷子的平均得分比正式考試時的的得分要低的現象。那麼,可能的一個解釋是,因為正式考試僅僅是一張試卷,有可能碰巧抽到學生擅長的題目,而平時的卷子因為量很大,所以減少了運氣因素的影響。

類比機器學習,就是測試集占的比例太低,或者原始數據集本來樣本就不怎麼多,按一定比例劃分後,訓練集的樣本還勉強充足,測試集的樣本就很少,然後碰巧出現對模型來說測試集比訓練集總體來說要「容易」的情況。

再回到卷子的例子上來。如果一個學生主要依靠背題「學習」的話,即使正式考試的題目比平時容易,但因為和做過的題目不一樣,這個學生得分還是會比平時練習要低。

在機器學習而言,就是模型本身不能過擬合,概括性要好。一般而言,越是簡單的模型越不容易過擬合。

所以,總的來說,訓練集和測試集不是取自同一數據分布,測試集樣本較少,模型比較簡單,就有可能出現測試集誤差反而低於訓練集的現象。

相應的解決方案就是,盡量從同一數據集劃分訓練集和測試集,保證測試集樣本充足(比如增加數據)。不太建議單純因為訓練集誤差高於測試集誤差就換用複雜模型,這麼做可能淪為強行過擬合、治標不治本。


做的什麼任務,有啥特徵有多少維,label是啥有多少,訓練集測試集咋分,訓練樣本有多少測試樣本有多少,用的啥演算法。出現你說的情況時測試誤差訓練誤差各位多少,訓練誤差是否符合預期。換演算法還是不是出現類似情況。參數咋調的,調整不同參數是不是還會出現類似情況。

先補充清楚這些點吧。


這個問題 我也碰到過。 雖然test結果更好,但是你要很小心,要排除這不是有問題在裡面。

1 確定是隨機分的 樣本2 確定 variable 沒問題 test和 train的distribution3在 test裡面有沒有leakage,或者test leak 更多4比較一下test和 train里variable 的 information有差距么

總之有很多,要小心不是你自己認為導致的就好了。查完這些,你應該大體知道一些原因了。如果還不知道,你就需要拿一些新數據再驗證一下

手機扣字真累

數據泄露的可能性多點。假設有這樣的情況,測試樣本里有與訓練集一模一樣或者類似的樣本,而且比例還很大。就好像一個學生還沒背完題庫,但是考試里卻老是出那種跟他背過的一樣的題目,而且數量還不少,那他豈不是開心壞了。


dropout特別高的時候應該會出現這種現象吧
推薦閱讀:
相关文章