推薦系統為什麼要分測試集與訓練集

2022-03-28 04:38:06 字數 1941 閱讀 2626

一般來說,訓練集用來估計模型中的引數,使模型能夠反映現實,進而**未來或其他未知的資訊,而測試集用來評估模型的**效能。

例如:已知1000個小朋友的體重和身高資料,想建立體重與身高的線性回歸模型。我們可以用900個小朋友的身高和體重資料(訓練集)來擬合模型中的引數,進而**另外100個小朋友的體重(已知身高資料),**值和實際值的差別就可以用來衡量模型的**效能(測試集是100個小朋友的體重和身高);或者使用1995-2023年的gdp資料建立線性回歸模型來**2023年的gdp資料;

這裡可能會有個疑問:

為什麼不用1000個小朋友的資料拿來做擬合?

將1000個小朋友的資料輸入到模型擬合過程中,這在技術上是可以實現的,也可以計算出來每個小朋友的實際值和**值,進而計算出誤差。但是,這可能存在過擬合問題,即模型**效能在其他資料集中表現會有明顯降低。也就是說,用乙個資料集既做訓練又做測試,效能評估指標是不準確的,相當於你考試時做的都是平常做過的課後題,無法檢測出實際水準。

為了更好地評價我們的模型,除非我們在1000個小朋友之外,再去找一些小朋友作為測試集。此時希望不會有人提出為什麼不把新找的資料加入到訓練集。同理,如果我們想測試基於1995-2023年gdp資料而建立的**模型準確度,需要2023年的gdp資料(這可能就要等一年才行了)。

資料當然沒那麼容易獲取,所以我們只能把現有的資料集人工分為訓練集和測試集。此時,比如只能獲得1995-2023年的資料,然後用2023年的gdp資料來檢驗模型**的準確性。

機器學習模型中的訓練集和測試集的劃分是很好理解的,而推薦系統中有一些,特別是協同過濾演算法,訓練集和測試集的劃分有所不同。

假如我們要給銀行開發乙個信用違約風險**模型,通過每個客戶的個人資訊、消費行為、資產狀況、借貸數額等狀況來**該客戶是否會按時還貸。

這是乙個經典的分類問題,我們可以使用機器學習模型來處理,像決策樹、邏輯回歸、神經網路等,用80%的使用者作為訓練集來擬合這些模型中的引數,然後把訓練好的模型放到剩餘那20%的使用者中做測試,從而得到模型的效能指標。

這時,訓練集和測試集的劃分方法是基於使用者的,訓練集的作用是擬合模型中的引數。

推薦系統中也有一些基於機器學習的推薦模型,這些和2.1是相同的,在這裡不提。

我們著重提的是基於使用者的協同過濾推薦演算法,它與機器學習模型直觀上有兩點不同。

協同過濾推薦演算法中沒有像線性回歸模型中那樣待估計的引數α、β等。(無監督)

協同過濾推薦演算法不能基於使用者劃分訓練集和測試集。因為協同過濾推薦模型要輸入的必須是個矩陣(需要近鄰使用者的購買行為資訊),而不是某使用者的一行資料(而決策樹、邏輯回歸模型是可以的)。

我最初的想法也是覺得協同過濾推薦演算法的訓練集根本沒有什麼用,沒有什麼能貢獻給測試集。後來才發現個推薦演算法的不同之處。

訓練集和測試集的劃分方法

協同過濾推薦演算法的訓練集劃分不是基於使用者的,而是基於值的,即【使用者,專案,評分】三元組。如果訓練集為80%,測試集為20%,我們就可以將使用者-專案評分中的80%抽取出來作為訓練集,沒抽取的那20%當做測試集(這些專案的值在訓練集中表示為不存在)。

假如,某使用者-專案評分矩陣中有100個專案,其中使用者張三購買並評價了20個專案,也就是有80個專案未購買。這時,我們將20個專案中抽取80%,也就是16個專案作為訓練集,另外4個專案作為測試集。即假設張三隻購買並評價了100個專案中的16個專案,實際上已經購買的那4個專案就當做未購買。

訓練集在推薦演算法中的作用

協同過濾推薦演算法中的第一步就是尋找近鄰使用者,近鄰使用者的質量和數量都會影響最終的模型效能。而訓練集要訓練的,其實就是目標使用者的近鄰使用者,也可以說是使用者相似矩陣。

舉個例子就是,我們以使用者張三的16個專案得出的近鄰使用者,和使用20個專案得出的近鄰使用者是不同的,而後者往往更加準確。拓展到所有使用者,使用80%資料得到的使用者相似矩陣,當然不如使用100%資料得到的使用者相似矩陣。但是正如第一節所說的,為了保證測試的準確性,我們必須分出來一些資料作為測試集。

參考:

43 為什麼要訓練資料集與測試資料集

我們說它之所以過擬合,是因為雖然我們學習到的這個曲線使得我們整個樣本使用這個曲線進行 的誤差變小了,但是如果有乙個新的樣本的話,比如下圖紫色的點對應的 x xx 座標大概是 2.5 左右,那麼根據我們的這個曲線 的結果大概是 0.5 左右,顯然可以發現這個 的結果和之前藍色的樣本點相差太大。我們直觀...

為什麼要測試先行

在產品的研發過程中,測試一項至關重要。不論是軟體還是硬體。軟體的測試先行,在研發過程中,就做到質量的保證,因為在出現bug的時候,容易定位bug,而且即使是在客戶端出現bug,也能夠輕易的找到bug出現的原因。硬體的測試先行,即保證了研發過程中,方便及時發現出現問題的原因。同時,也為以後的批量生產做...

為什麼要分庫分表

初學者在看到這個問題的時候,可能首先想到的是 mysql 一張表到底能存放多少條資料?根據 mysql 官方文件的介紹,mysql 理論上限是232 受限於32位軟體 條資料,然而實際操作中,往往還受限於下面兩條因素 myisamdatapointersize,mysql 的 myisamdatap...