推薦系統為什麼要分測試集和訓練集?
不是可以直接用整個數據算出RMSE或者MAE嗎?
為什麼要分為測試集和訓練集。。比如協同過濾的話,測試集可以得出什麼模型嗎?
訓練集 驗證集 測試集
機器學習 數據挖掘 數據集劃分 訓練集 驗證集 測試集
Q:如何將數據集劃分為測試數據集和訓練數據集?
A:three ways:
1.像sklearn一樣,提供一個將數據集切分成訓練集和測試集的函數:
默認是把數據集的75%作為訓練集,把數據集的25%作為測試集。
2.交叉驗證(一般取十折交叉驗證:10-fold cross validation)
k個子集,每個子集均做一次測試集,其餘的作為訓練集。
交叉驗證重複k次,每次選擇一個子集作為測試集,並將k次的平均交叉驗證識別正確率作為結果。
3.訓練數據,驗證數據(注意區別交叉驗證數據集),測試數據(在Coursera上提到)
一般做預測分析時,會將數據分為兩大部分。一部分是訓練數據,用於構建模型,一部分是測試數據,用於檢驗模型。但是,有時候模型的構建過程中也需要檢驗模型,輔助模型構建,所以會將訓練數據在分為兩個部分:1)訓練數據;2)驗證數據(Validation Data)。驗證數據用於負責模型的構建。典型的例子是用K-Fold Cross Validation裁剪決策樹,求出最優葉節點數,防止過渡擬合(Overfitting)。
所以:
訓練數據(Test Data):用於模型構建
驗證數據(Validation Data):可選,用於輔助模型構建,可以重複使用。
測試數據(Test Data):用於檢測模型構建,此數據只在模型檢驗時使用,用於評估模型的準確率。絕對不允許用於模型構建過程,否則會導致過渡擬合。
references
http://www.cnblogs.com/bourneli/archive/2013/03/11/2954060.html
http://blog.csdn.net/lhx878619717/article/details/49079785
http://blog.csdn.net/chloezhao/article/details/53502674
https://segmentfault.com/q/1010000005917400
為了防止過度擬合啊~ 你把所有數據都用來訓練模型,建立的模型自然是最契合這些數據的,測試表現也好。但是換了其它數據集測試這個模型效果可能就沒那麼好了。就好像你給班上同學做校服,大家穿著都合適你就覺得按這樣做就對了,那給別的班同學穿呢?不合適的概率會高吧。總而言之訓練集和測試集相同的話,模型評估結果可能比實際要好。
不僅僅是推薦系統需要分測試和訓練。其他機器學習的方法也是需要的。更廣泛地說,任何嚴謹的結論,不管是存在於物理、化學或生物學實驗等等科學實驗中,都需要一個參照系的!這也是科學方法論的哲學基礎!任何結論的精度或準確性都是相對於參考系的,這個思想的具體表現放在化學實驗中就是對照樣本,放在機器學習中就是測試集。無它,通也!
測試集最大的作用就是讓你看看自己訓練出來的模型究竟有沒有效果。簡單的說,如果你訓練得不夠,精度就上不去;如果你訓練得過頭,就有可能過擬合。唯有在測試集能到看到效果。
這一實踐來自統計學上的交叉驗證方法,是為了防止過擬合現象的出現。這個詞條寫的很詳細了http://en.wikipedia.org/wiki/Cross-validation_%28statistics%29
推薦閱讀:
※Udacity的納米學位 (Nano degree)怎麼樣?
※論文導讀 | TFX:基於TensorFlow可大規模擴展的機器學習平台
※Andrew Ng對 Geoffrey Hinton 的採訪:致敬老爺子的一路堅持!
※揭開機器學習的面紗