鏈接:https://www.zhihu.com/question/22872584/answer/620691257
來源:知乎
1、訓練集和測試集
一般來說,訓練集用來估計模型中的參數,使模型能夠反映現實,進而預測未來或其他未知的信息,而測試集用來評估模型的預測性能。
例如:已知1000個小朋友的體重和身高數據,想建立體重與身高的線性回歸模型。我們可以用900個小朋友的身高和體重數據(訓練集)來擬合模型中的參數,進而預測另外100個小朋友的體重(已知身高數據),預測值和實際值的差別就可以用來衡量模型的預測性能(測試集是100個小朋友的體重和身高);或者使用1995-2018年的GDP數據建立線性回歸模型來預測2019年的GDP數據;
這里可能會有個疑問:
為什么不用1000個小朋友的數據拿來做擬合?
將1000個小朋友的數據輸入到模型擬合過程中,這在技術上是可以實現的,也可以計算出來每個小朋友的實際值和預測值,進而計算出誤差。但是,這可能存在過擬合問題,即模型預測性能在其他數據集中表現會有明顯降低。也就是說,用一個數據集既做訓練又做測試,性能評估指標是不准確的,相當於你考試時做的都是平常做過的課后題,無法檢測出實際水准。
為了更好地評價我們的模型,除非我們在1000個小朋友之外,再去找一些小朋友作為測試集。此時希望不會有人提出為什么不把新找的數據加入到訓練集。同理,如果我們想測試基於1995-2018年GDP數據而建立的預測模型准確度,需要2019年的GDP數據(這可能就要等一年才行了)。
數據當然沒那么容易獲取,所以我們只能把現有的數據集人工分為訓練集和測試集。此時,比如只能獲得1995-2017年的數據,然后用2018年的GDP數據來檢驗模型預測的准確性。
2、推薦系統與機器學習
機器學習模型中的訓練集和測試集的划分是很好理解的,而推薦系統中有一些,特別是協同過濾算法,訓練集和測試集的划分有所不同。
2.1 機器學習
假如我們要給銀行開發一個信用違約風險預測模型,通過每個客戶的個人信息、消費行為、資產狀況、借貸數額等狀況來預測該客戶是否會按時還貸。
這是一個經典的分類問題,我們可以使用機器學習模型來處理,像決策樹、邏輯回歸、神經網絡等,用80%的用戶作為訓練集來擬合這些模型中的參數,然后把訓練好的模型放到剩余那20%的用戶中做測試,從而得到模型的性能指標。
這時,訓練集和測試集的划分方法是基於用戶的,訓練集的作用是擬合模型中的參數。
2.2 推薦系統
推薦系統中也有一些基於機器學習的推薦模型,這些和2.1是相同的,在這里不提。
我們着重提的是基於用戶的協同過濾推薦算法,它與機器學習模型直觀上有兩點不同。
- 協同過濾推薦算法中沒有像線性回歸模型中那樣待估計的參數α、β等。(無監督)
- 協同過濾推薦算法不能基於用戶划分訓練集和測試集。因為協同過濾推薦模型要輸入的必須是個矩陣(需要近鄰用戶的購買行為信息),而不是某用戶的一行數據(而決策樹、邏輯回歸模型是可以的)。
我最初的想法也是覺得協同過濾推薦算法的訓練集根本沒有什么用,沒有什么能貢獻給測試集。后來才發現個推薦算法的不同之處。
訓練集和測試集的划分方法
協同過濾推薦算法的訓練集划分不是基於用戶的,而是基於值的,即【用戶,項目,評分】三元組。如果訓練集為80%,測試集為20%,我們就可以將用戶-項目評分中的80%抽取出來作為訓練集,沒抽取的那20%當做測試集(這些項目的值在訓練集中表示為不存在)。
假如,某用戶-項目評分矩陣中有100個項目,其中用戶張三購買並評價了20個項目,也就是有80個項目未購買。這時,我們將20個項目中抽取80%,也就是16個項目作為訓練集,另外4個項目作為測試集。即假設張三只購買並評價了100個項目中的16個項目,實際上已經購買的那4個項目就當做未購買。
訓練集在推薦算法中的作用
協同過濾推薦算法中的第一步就是尋找近鄰用戶,近鄰用戶的質量和數量都會影響最終的模型性能。而訓練集要訓練的,其實就是目標用戶的近鄰用戶,也可以說是用戶相似矩陣。
舉個例子就是,我們以用戶張三的16個項目得出的近鄰用戶,和使用20個項目得出的近鄰用戶是不同的,而后者往往更加准確。拓展到所有用戶,使用80%數據得到的用戶相似矩陣,當然不如使用100%數據得到的用戶相似矩陣。但是正如第一節所說的,為了保證測試的准確性,我們必須分出來一些數據作為測試集。