推薦系統之--- 評分預測問題


本書到目前為止都是在討論TopN推薦,即給定一個用戶,如何給他生成一個長度為N的推薦列表,使該推薦列表能夠盡量滿足用戶的興趣和需求。

本書之所以如此重視TopN推薦,是因為它非常接近於滿足實際系統的需求,實際系統絕大多數情況下就是給用戶提供一個包括N個物品的個性化推薦列表。

評分預測問題最基本的數據集就是用戶評分數據集。該數據集由用戶評分記錄組成,每一條評分記錄是一個三元組(u,i, r),表示用戶u給物品i賦予了評分r,本章用ui r 表示用戶u對物品i的評分。

因為用戶不可能對所有物品都評分,因此評分預測問題就是如何通過已知的用戶歷史評分記錄預測未知的用戶評分記錄。

  

1、離線實驗方法

關於如何划分訓練集和測試集,如果是和時間無關的預測任務,可以以均勻分布隨機划分數據集,即對每個用戶,隨機選擇一些評分記錄作為測試集,剩下的記錄作為測試集。如果是和時間相關的任務,那么需要將用戶的舊行為作為訓練集,將用戶的新行為作為測試集。Netflix通過如下方式划分數據集,首先將每個用戶的評分記錄按照從早到晚進行排序,然后將用戶最后10%的評分記錄作為測試集,前90%的評分記錄作為訓練集。

 

 2、評分預測算法

1) 平均值

最簡單的評分預測算法是利用平均值預測用戶對物品的評分的。下面各節將分別介紹各種不同的平均值。
1. 全局平均值

2. 用戶評分平均值

3. 物品評分平均值

4.用戶分類對物品分類的平均值

 用戶和物品的平均分 對於一個用戶,可以計算他的評分平均分。然后將所有用戶按照評分平均分從小到大排序,並將用戶按照平均分平均分成N類。物品也可以用同樣的方式分類。

 用戶活躍度和物品流行度 對於一個用戶,將他評分的物品數量定義為他的活躍度。得到用戶活躍度之后,可以將用戶通過活躍度從小到大排序,然后平均分為N類。物品的流行度定義為給物品評分的用戶數目,物品也可以按照流行度均勻分成N類。

MovieLens數據集中利用不同平均值方法得到的RMSE,實驗結果表明對用戶使用UserVoteCluster,對物品采用ItemVoteCluster,可以獲得最小的RMSE。

 

2) 基於鄰域的方法

 

3) 隱語義模型與矩陣分解模型

最近這幾年做機器學習和數據挖掘研究的人經常會看到下面的各種名詞,即隱含類別模型(Latent Class Model)、隱語義模型(Latent Factor Model)、pLSA、LDA、Topic Model、MatrixFactorization、Factorized Model。

這些名詞在本質上應該是同一種思想體系的不同擴展。在推薦系統領域,提的最多的就是潛語義模型和矩陣分解模型。其實,這兩個名詞說的是一回事,就是如何通過降維的方法將評分矩陣補全。


用戶的評分行為可以表示成一個評分矩陣R,其中R[u][i]就是用戶u對物品i的評分。但是,用戶不會對所有的物品評分,所以這個矩陣里有很多元素都是空的,這些空的元素稱為缺失值(missing value)。因此,評分預測從某種意義上說就是填空,如果一個用戶對一個物品沒有評過分,那么推薦系統就要預測這個用戶是否是否會對這個物品評分以及會評幾分。

 

1. 傳統的SVD分解
對於如何補全一個矩陣,歷史上有過很多的研究。一個空的矩陣有很多種補全方法,而我們要找的是一種對矩陣擾動最小的補全方法。那么什么才算是對矩陣擾動最小呢?一般認為,如果補全后矩陣的特征值和補全之前矩陣的特征值相差不大,就算是擾動比較小。所以,最早的矩陣分解模型就是從數學上的SVD(奇異值分解)開始的。②給定m個用戶和n個物品,和用戶對物品

SVD分解是早期推薦系統研究常用的矩陣分解方法,不過該方法具有以下缺點,因此很難在實際系統中應用。
 該方法首先需要用一個簡單的方法補全稀疏評分矩陣。一般來說,推薦系統中的評分矩陣是非常稀疏的,一般都有95%以上的元素是缺失的。而一旦補全,評分矩陣就會變成一個稠密矩陣,從而使評分矩陣的存儲需要非常大的空間,這種空間的需求在實際系統中是不可能接受的。
 該方法依賴的SVD分解方法的計算復雜度很高,特別是在稠密的大規模矩陣上更是非常慢。一般來說,這里的SVD分解用於1000維以上的矩陣就已經非常慢了,而實際系統動輒是上千萬的用戶和幾百萬的物品,所以這一方法無法使用。如果仔細研究關於這一方法的論文可以發現,實驗都是在幾百個用戶、幾百個物品的數據集上進行的。

 

2. Simon Funk的SVD分解

 

3. 加入偏置項后的LFM

4. 考慮鄰域影響的LFM
前面的LFM模型中並沒有顯式地考慮用戶的歷史行為對用戶評分預測的影響。為此,Koren在Netflix Prize比賽中提出了一個模型①,將用戶歷史評分的物品加入到了LFM模型中,Koren將該模型稱為SVD++。
在介紹SVD++之前,我們首先討論一下如何將基於鄰域的方法也像LFM那樣設計成一個可以學習的模型。其實很簡單,我們可以將ItemCF的預測算法改成如下方式:

 

4)  加入時間信息

2. 基於矩陣分解的模型融合時間信息
在引入時間信息后,用戶評分矩陣不再是一個二維矩陣,而是變成了一個三維矩陣。不過

 

5) 模型融合

Netflix Prize的最終獲勝隊伍通過融合上百個模型的結果才取得了最終的成功。由此可見模型融合對提高評分預測的精度至關重要。本節討論模型融合的兩種不同技術。

1. 模型級聯融合

級聯融合很像Adaboost算法。和Adaboost算法類似,該方法每次產生一個新模型,按照一定的參數加到舊模型上去,從而使訓練集誤差最小化。不同的是,這里每次生成新模型時並不對樣本集采樣,針對那些預測錯的樣本,而是每次都還是利用全樣本集進行預測,但每次使用的模型都有區別。一般來說,級聯融合的方法都用於簡單的預測器,比如前面提到的平均值預測器。

 

2. 模型加權融合
假設我們有K個不同的預測器{r(1) , r(2) , ...,  r(K )},本節主要討論如何將它們融合起來獲得最低的預測誤差。

最簡單的融合算法就是線性融合,即最終的預測器ˆr 是這K個預測器的線性加權。

一般來說,評分預測問題的解決需要在訓練集上訓練K個不同的預測器,然后在測試集上作出預測。但是,如果我們繼續在訓練集上融合K個預測器,得到線性加權系數,就會造成過擬合的問題。

因此,在模型融合時一般采用如下方法:
 假設數據集已經被分為了訓練集A和測試集B,那么首先需要將訓練集A按照相同的分割方法分為A1和A2,其中A2的生成方法和B的生成方法一致,且大小相似。
 在A1上訓練K個不同的預測器,在A2上作出預測。因為我們知道A2上的真實評分值,所以可以在A2上利用最小二乘法①計算出線性融合系數k。
 在A上訓練K個不同的預測器,在B上作出預測,並且將這K個預測器在B上的預測結果按照已經得到的線性融合系數加權融合,以得到最終的預測結果。
除了線性融合,還有很多復雜的融合方法,比如利用人工神經網絡的融合算法。其實,模型融合問題就是一個典型的回歸問題,因此所有的回歸算法都可以用於模型融合。

 

 

 

總結

最后,我想引用2009年ACM推薦系統大會上Strand研究人員做的一個報告“推薦系統十堂課”,在這個報告中Strand的研究人員總結了他們設計推薦系統的經驗,提出了10條在設計推薦系統中學習到的經驗和教訓。
(1) 確定你真的需要推薦系統。推薦系統只有在用戶遇到信息過載時才必要。如果你的網站物品不太多,或者用戶興趣都比較單一,那么也許並不需要推薦系統。所以不要糾結於推薦系統這個詞,不要為了做推薦系統而做推薦系統,而是應該從用戶的角度出發,設計出能夠真正幫助用戶發現內容的系統,無論這個系統算法是否復雜,只要能夠真正幫助用戶,就是一個好的系統。


(2) 確定商業目標和用戶滿意度之間的關系。對用戶好的推薦系統不代表商業上有用的推薦系統,因此要首先確定用戶滿意的推薦系統和商業上需求的差距。一般來說,有些時候用戶滿意和商業需求並不吻合。但是一般情況下,用戶滿意度總是符合企業的長期利益,因此這一條的主要觀點是要平衡企業的長期利益和短期利益之間的關系。


(3) 選擇合適的開發人員。一般來說,如果是一家大公司,應該雇用自己的開發人員來專門進行推薦系統的開發。


(4) 忘記冷啟動的問題。不斷地創新,互聯網上有任何你想要的數據。只要用戶喜歡你的產品,他們就會不斷貢獻新的數據。


(5) 平衡數據和算法之間的關系。使用正確的用戶數據對推薦系統至關重要。對用戶行為數據的深刻理解是設計好推薦系統的必要條件,因此分析數據是設計系統中最重要的部分。數據分析決定了如何設計模型,而算法只是決定了最終如何優化模型。


(6) 找到相關的物品很容易,但是何時以何種方式將它們展現給用戶是很困難的。不要為了推薦而推薦.

(7) 不要浪費時間計算相似興趣的用戶,可以直接利用社會網絡數據。
(8) 需要不斷地提升算法的擴展性。
(9) 選擇合適的用戶反饋方式。
(10) 設計合理的評測系統,時刻關注推薦系統各方面的性能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM