推薦系統的幾種常見模型概述

網上對個性化推薦的介紹很零散,我正好作過相關的工做,因此這裏作個總結。算法

總的來講,推薦系統的目標能夠分爲預測評分和物品推薦兩種,其實模型也可相互轉換,目前對前者的研究也更多,由於前者更適合建複雜的模型,因此這裏只討論預測評分的狀況。推薦系統中經常使用的數據有如下幾種:網絡

1. 基於內容的推薦學習

要預測一個用戶未來的行爲,最直觀的想法固然是看看他過去幹了些什麼,看了哪些電影啊,打多少分啊,聽過什麼歌啊,之類的。基於內容推薦的基本思想就是,你過去曾經買過什麼東西、看過什麼電影,我就給你推薦同樣的東西或者相似的東西,顯然這樣的模型太直接,沒有挖掘出數據背後隱含的內涵,只用這樣簡單的推薦確定達不到最好的效果,因此咱們須要有協同過濾。大數據

 

2. 協同過濾spa

協同過濾能夠分爲兩種模型,一種叫KNN,用戶最近鄰模型,一種是Matrix Factorization,矩陣分解模型。KNN又有兩種基本作法:一是找出與用戶u最相似的K個用戶,譬如若是咱們想要預測u對電影i的評分,咱們能夠找出其餘K個對電影i評過度的用戶,而後分別計算他們與用戶u的類似性,而後把他們對i的評分進行加權之後,做爲用戶u對i的評分。計算用戶之間的類似性有不少方法,最經常使用的是餘弦類似係數和皮爾森類似係數,都是將每個用戶的評分狀況做爲一個向量之後計算兩個向量之間的餘弦夾角或皮爾森係數。其中皮爾森係數其實就是一種減掉了平均值的方法,理論上更能貼近實際狀況,更可靠。這是基於用戶的推薦,基於物品的推薦也是一個道理,譬如咱們要預測用戶u對物品i的評分,咱們找出用戶u評過度的其餘K個的物品,用一樣的辦法加權後獲得u對i的預測值。基於用戶和基於物品能夠結合起來作推薦,有人專門作過這個研究,譬如把二者的結果分別乘一個加權係數之後相加,而後再學習出兩個係數的合適的值。設計

KNN的作法比較簡單也很容易想到,因此天然須要一種更復雜的辦法來改進系統。Matrix Factorization的想法來自於SVD,即奇異值分解(singular value decomposition)。奇異值分解的概念網上隨便搜一搜就有不少,搞統計的還有搞模式識別的人成天就研究這些東西。SVD只是分解矩陣的其中一種方法,譬如特徵值分解通常線性代數課上都講過,簡單地說就是把一個M*N的矩陣分解成M*M、M*N、N*N三個矩陣的乘積,而後中間那個M*N的矩陣中就包含了奇異值,也就表明了這個矩陣不同凡響的一些地方。數據分析

SVD有許多辦法能夠算出來,但在推薦系統中奇異值不是直接計算出來的,通常都是經過隨機梯度降低學習出來的。這就好像你在推薦系統須要作直線擬合的時候也不會直接去算,而是進行迭代。矩陣分解出來的奇異值理論上是不可解釋的。假若有u個用戶和i個物品,這樣評分矩陣就是一個u*i的矩陣,假設通過分解以後,有u*f和i*f這樣兩個矩陣,就是說分解出來了一個長度爲f的向量,拿電影來打比方,譬如用戶有三個:張3、李4、王二,電影也有三個:《拯救大兵瑞恩》、《了不得的蓋茨比》、《霍比特人》、這樣分解出來的向量可能具備的意義就是:二戰、斯皮爾伯格、小資、三角戀、奇幻、中世紀,這樣f就爲6,u*f的矩陣就是表示用戶對這些標籤的感冒程度,i*f的矩陣則表示電影對這些標籤的擁有程度,譬如u*f中張三的那一行是(0.9,0.5,0.2,0.2,0.4,0.3),咱們就能夠知道張三最喜歡戰爭片,而不太喜歡小資愛情片,假如這時候有一部新的電影new movie的向量爲(0.4,0.3,0.5,0.6,0.7,0.5),那麼張三對這個new movie的評分就能夠預測爲兩個向量的內積。數學

在不少論文中,分解出來的向量的信息被稱爲隱含向量(latent factor),前面的KNN模型就沒有考慮到latent factor的影響,這也是KNN和Matrix Factorization模型最重要的區別。it

除此以外,實際的推薦系統中還會考慮到偏見的影響,又稱爲基準偏移量,因此又有一個baseline模型。譬若有的用戶很苛刻,傾向於給電影評分評低1分。有的電影口碑很差,譬如《小時代》,就容易被人故意評低幾分。因此咱們須要創建兩個向量,一個存放每一個用戶的偏見分數,一個存放每一個電影的偏見分數。這樣就消除了偏見的影響。舉個例子,譬如全部電影的評分的均值是3.5分(5分是滿分),電影《小時代》傾向於被人評低2分,而用戶小花評分不負責,老是評分多出均值1.5分,那咱們對小花對《小時代》的評分預測就是3.5-2+1.5=2.5分。在實際算法中,兩個偏移矩陣也是經過隨機梯度降低學習出來。io

到此,協同過濾的方法已經有三種了:矩陣分解、用戶最近鄰、基準偏移。

 

3. 基於社交網絡的推薦

在真實的推薦系統中咱們能獲得的信息每每不止用戶的評分信息,通常還有寫別的的屬性信息,譬如用戶的填寫的我的資料之類的。一種利用這些屬性信息的辦法就是在異質網絡中進行推薦。譬如要看用戶u對電影i的評分,能夠找出用戶u的好友們對i的評分,用這些評分再來預測u對i的評分。創建用戶和項目之間的聯繫須要引入元路徑的概念,譬如一種將用戶u和電影i相連的方式就是u-u的朋友-i,這就能夠看作一條路徑,其餘的路徑還有用戶-電影i-電影類型-電影j之類的。我本身的畢業設計作的就是這個,不過模型比較簡單,挑選了5條元路徑,每條路徑上都是KNN推薦,最後的結果很是可觀,完爆前面所說的其餘算法。這說明在大數據分析中,數據量纔是重點,挖空心思去研究數據背後的數學理論的結果遠不如多整合點數據。

 

4. 結語

真正的推薦系統中每每都是結合了多種方法,而後再加上些抖機靈的辦法。

相關文章
相關標籤/搜索