協同過濾的模型一般為m個物品,m個用戶的數據,只有部分用戶和部分數據之間是有評分數據的,其它部分評分是空白,此時我們要用已有的部分稀疏數據來預測那些空白的物品和數據之間的評分關系,找到最高評分的物品推薦給用戶。
一般來說,協同過濾推薦分為三種類型。第一種是基於用戶(user-based)的協同過濾,第二種是基於項目(item-based)的協同過濾,第三種是基於模型(model based)的協同過濾。
1、基於用戶(user-based)的協同過濾
主要考慮的是用戶和用戶之間的相似度,只要找出相似用戶喜歡的物品,並預測目標用戶對對應物品的評分,就可以找到評分最高的若干個物品推薦給用戶。
基於用戶的CF原理如下:
- 1、分析各個用戶對item的評價(通過瀏覽記錄、購買記錄等);
- 2、依據用戶對item的評價計算得出所有用戶之間的相似度;
- 3、選出與當前用戶最相似的N個用戶;
- 4、將這N個用戶評價最高並且當前用戶又沒有瀏覽過的item推薦給當前用戶。
舉個栗子,基於用戶的CF算法大致的計算流程如下:
(1)根據網站的記錄計算出一個用戶與item的關聯矩陣,即每個用戶對商品的評分
(2)計算用戶與用戶之間的相似度,使用余弦距離,值越大說明越相似。
(3)我們要為用戶1推薦物品,則找出與用戶1相似度最高的N名用戶(設N=2)評價的物品,去掉用戶1評價過的物品,則是推薦結果。
優缺點:
-
優點: 在數據集完善、內容豐富的條件下,能夠獲得較高的准確率,而且能避開Item Profile上的挖掘進行推薦,能夠對物品的關聯性、用戶的偏好進行隱式透明的挖掘。
-
缺點: 隨着系統用戶數量的增大,計算Top-K Relevance User的時間會顯著增長,使得該方法難以勝任用戶量變化巨大的系統;新用戶加入,打分記錄很少,難以准確計算Top-K Relevance User.
- 適用用戶較少的場合,否則用戶相似度矩陣計算代價很大。
- 適合時效性較強,用戶個性化興趣不太明顯的領域。
- 用戶有新行為,不一定造成推薦結果的立即變化。
- 對新用戶不友好,對新物品友好,因為用戶相似度矩陣需要離線計算.
- 很難提供令用戶信服的推薦解釋。
2、基於項目(item-based)的協同過濾
找到物品和物品之間的相似度,只有找到了目標用戶對某些物品的評分,那么我們就可以對相似度高的類似物品進行預測,將評分最高的若干個相似物品推薦給用戶。比如,你在網上買了一本機器學習相關的書,網站馬上會推薦一堆機器學習,大數據相關的書給你,這里就明顯用到了基於項目的協同過濾思想。
基於物品的CF原理大同小異,只是主體在於物品:
- 1、分析各個用戶對item的瀏覽記錄。
- 2、依據瀏覽記錄分析得出所有item之間的相似度;
- 3、對於當前用戶評價高的item,找出與之相似度最高的N個item;
- 4、將這N個item推薦給用戶。
優缺點:
- 優點:
- 為特殊興趣愛好的用戶進行推薦
- 通過列出推薦項目的內容特征,可以解釋為什么推薦那些項目
- 能推薦新的或不是很流行的項目,沒有新項目問題。
- 不需要其它用戶的數據,沒有冷開始問題和稀疏問題。
- 已有比較好的技術,如關於分類學習方面的技術已相當成熟。
- 缺點:是要求內容能容易抽取成有意義的特征,要求特征內容有良好的結構性,並且用戶的口味必須能夠用內容特征形式來表達,不能顯式地得到其它用戶的判斷情況
-
優點: 計算簡單,容易實現實時響應。由於Item被打分的變化劇烈程度低,,因此 Item 相似度的計算一般可以采用離線完成、定期更新的方式,從而減少了線上計算;可解釋性好。
-
缺點: :以物品為基礎的系統過濾較少考慮用戶之間的差別,因此精
度較 User-Based 方法稍微遜色一點;還有數據稀疏性(Sparsity)和冷啟動(Cold-Start)的問題。
- 適用於物品數明顯小於用戶數的場合,否則物品相似度矩陣計算代價很大。
- 適合長尾物品豐富,用戶個性化需求強的領域。
- 用戶有新行為,一定導致推薦結果的實時變化。
- 對新用戶友好,對新物品不友好,因為物品相似度矩陣需要離線計算。
- 用用戶歷史行為做推薦解釋,比較令用戶信服。
3、協同過濾(CF)算法確實簡單,而且很多時候推薦也是很准確的。然而它也存在一些問題:
- 1、依賴於准確的用戶評分;
- 2、在計算的過程中,那些大熱的物品會有更大的幾率被推薦給用戶;
- 3、冷啟動問題。當有一名新用戶或者新物品進入系統時,推薦將無從依據;
- 4、在一些item生存周期短(如新聞、廣告)的系統中,由於更新速度快,大量item不會有用戶評分,造成評分矩陣稀疏,不利於這些內容的推薦。
優點:
- 能夠過濾難以進行機器自動內容分析的信息,如藝術品,音樂等。
- 能夠發掘用戶的潛在興趣。
- 過濾掉一些復雜、難以表述的概念。
缺點:
- 不能實時推薦,必須有用戶行為后(最初評價問題)。
- 用戶對商品的評價非常稀疏,這樣基於用戶的評價所得到的用戶間的相似性可能不准確(即稀疏性問題)
- 冷啟動問題。
4、基於模型的協同過濾
我們的問題是這樣的m個物品,m個用戶的數據,只有部分用戶和部分數據之間是有評分數據的,其它部分評分是空白,此時我們要用已有的部分稀疏數據來預測那些空白的物品和數據之間的評分關系,找到最高評分的物品推薦給用戶。
對於這個問題,用機器學習的思想來建模解決,主流的方法可以分為:用關聯算法,聚類算法,分類算法,回歸算法,矩陣分解,神經網絡,圖模型以及隱語義模型來解決。
(1)常用的關聯推薦算法有Apriori,FP Tree和PrefixSpan。
一般我們可以找出用戶購買的所有物品數據里頻繁出現的項集活序列,來做頻繁集挖掘,找到滿足支持度閾值的關聯物品的頻繁N項集或者序列。如果用戶購買了頻繁N項集或者序列里的部分物品,那么我們可以將頻繁項集或序列里的其他物品按一定的評分准則推薦給用戶,這個評分准則可以包括支持度,置信度和提升度等。
(2)常用的聚類推薦算法有K-Means, BIRCH, DBSCAN和譜聚類。
用聚類算法做協同過濾就和前面的基於用戶或者項目的協同過濾有些類似了。我們可以按照用戶或者按照物品基於一定的距離度量來進行聚類。如果基於用戶聚類,則可以將用戶按照一定距離度量方式分成不同的目標人群,將同樣目標人群評分高的物品推薦給目標用戶。基於物品聚類的話,則是將用戶評分高物品的相似同類物品推薦給用戶。
(3)常見的分類推薦算法有邏輯回歸和朴素貝葉斯,兩者的特點是解釋性很強。
如果我們根據用戶評分的高低,將分數分成幾段的話,則這個問題變成分類問題。比如最直接的,設置一份評分閾值,評分高於閾值的就是推薦,評分低於閾值就是不推薦,我們將問題變成了一個二分類問題。雖然分類問題的算法多如牛毛,但是目前使用最廣泛的是邏輯回歸。為啥是邏輯回歸而不是看起來更加高大上的比如支持向量機呢?因為邏輯回歸的解釋性比較強,每個物品是否推薦我們都有一個明確的概率放在這,同時可以對數據的特征做工程化,得到調優的目的。目前邏輯回歸做協同過濾在BAT等大廠已經非常成熟了。
(4)常用的回歸推薦算法有Ridge回歸,回歸樹和支持向量回歸。
用回歸算法做協同過濾比分類算法看起來更加的自然。我們的評分可以是一個連續的值而不是離散的值,通過回歸模型我們可以得到目標用戶對某商品的預測打分。
(5)矩陣分解
用矩陣分解做協同過濾是目前使用也很廣泛的一種方法。由於傳統的奇異值分解SVD要求矩陣不能有缺失數據,必須是稠密的,而我們的用戶物品評分矩陣是一個很典型的稀疏矩陣,直接使用傳統的SVD到協同過濾是比較復雜的。
目前主流的矩陣分解推薦算法主要是SVD的一些變種,比如FunkSVD,BiasSVD和SVD++。這些算法和傳統SVD的最大區別是不再要求將矩陣分解為UΣVTUΣVT的形式,而變是兩個低秩矩陣PTQPTQ的乘積形式。
(6)用神經網絡乃至深度學習做協同過濾應該是以后的一個趨勢。目前比較主流的用兩層神經網絡來做推薦算法的是限制玻爾茲曼機(RBM)。在目前的Netflix算法比賽中, RBM算法的表現很牛。當然如果用深層的神經網絡來做協同過濾應該會更好,大廠商用深度學習的方法來做協同過濾應該是將來的一個趨勢。后續我會專門開篇來講講RBM。
(7)推薦系統新方向
a) 基於集成學習的方法和混合推薦:這個和混合推薦也靠在一起了。由於集成學習的成熟,在推薦算法上也有較好的表現。一個可能取代邏輯回歸的算法是GBDT。目前GBDT在很多算法比賽都有好的表現,而有工業級的並行化實現類庫。
b)基於矩陣分解的方法:矩陣分解,由於方法簡單,一直受到青睞。目前開始漸漸流行的矩陣分解方法有分解機(Factorization Machine)和張量分解(Tensor Factorization)。
c) 基於深度學習的方法:目前兩層的神經網絡RBM都已經有非常好的推薦算法效果,而隨着深度學習和多層神經網絡的興起,以后可能推薦算法就是深度學習的天下了?目前看最火爆的是基於CNN和RNN的推薦算法。
參考:https://www.cnblogs.com/pinard/p/6349233.html