推薦算法集合

推薦算法集合

之前寫過一個樓盤的推薦算法,感覺設計還是還蠻不錯的,但是有一個缺點就是可以作爲的參考的參數,太少,在前面的推薦算法中,只有一個userid和projectid的兩個維度的。不是很合理,現在我希望添加更多的參考屬性。

推薦算法大致基類

  • 基於流行度的算法
  • 協同過濾算法
  • 基於內容的算法
  • 基於模型的算法
  • 混合算法

基於流行度的算法

基於流行度的算法非常簡單粗暴,類似於各大新聞、微博熱榜

協同過濾算法

collaborative filtering 是一個很常用的一種算法,CF算法包括基於用戶的CF和基於物品的CF。

基於用戶的CF原理如下

  • 分析各個用戶對item的評價(通過瀏覽記錄、購買記錄等)
  • 依據用戶對item的評價計算得出所有用戶之間的相似度
  • 選出與當前用戶最相似的n個用戶
  • 將這N個用戶評價最高並且當前用戶又沒有瀏覽過的item推薦給當前用戶

基於物品的CF原理

  • 分析各個用戶對item的瀏覽記錄
  • 依據瀏覽記錄分析得出所有item之間的相似度
  • 對於當前用戶評價高的item,找出與之相似度最高的N個item
  • 將這N個item推薦給用戶

Similary
Cosine Similary cos=a/c cos=a^2+b^2-c^2/2ab
cos=a*b/||a||*||b||

聚一個例子,來說明餘弦計算文本相似度
句子A:這隻皮靴號碼大了。那隻號碼合適
句子B:這隻皮靴號碼不小,那隻更合適
寫出詞頻向量
句子A:(1,1,2,1,1,1,0,0,0)
句子B:(1,1,1,0,1,1,1,1,1)
向量餘弦值來確定兩個句子的相似的
=0.81

我們可以看到,CF算法確實簡單,而且很多時候推薦也是很準確的。然而它也存在一些問題。

  • 依賴於精確的用戶評分
  • 在計算的過程中,那些大熱的物品會有很大的機率被推薦給用戶
  • 冷啓動問題。當有一名新用戶或者新物品進入系統時,推薦將無從依據
  • 在一些item生存週期短(如新聞、廣告)的系統中,由於更新速度快,大量item不會有用戶評分,造成評分矩陣稀疏,不利於這些內容的推薦

基於內容的算法

CF算法看起來很好很強大,通過改進也能克服各種缺點。於是基於內容的推薦算法

基於模型的算法

基於模型的方法有很多,用到的諸如機器學習的方法也可以很深,這裏只簡單介紹下比較簡單的方法–logistics迴歸預測,我們通過分析系統中用戶的行爲和購買記錄等數據,得到如下表:

x1 x2 x3 x4 y
item1 x x x x 1
item2 x x x x 0
item3 x x x x 1
x x x x
item4 x x x x 2

表中的行是一種物品,x1~xn是影響用戶行爲的各種特徵屬性,如用戶年齡段、性別、地域、物品的價格、類別等等,y則是用戶對於該物品的喜好程度,可以是購買記錄、瀏覽、收藏等等。通過大量這類的數據,我們可以迴歸擬合出一個函數,計算出x1~xn對應的係數,這即是各特徵屬性對應的權重,權重值越大則表明該屬性對於用戶選擇商品越重要。

在擬合函數的時候我們會想到,單一的某種屬性和另一種屬性可能並不存在強關聯。比如,年齡與購買護膚品這個行爲並不呈強關聯,性別與購買護膚品也不強關聯,但當我們把年齡與性別綜合在一起考慮時,它們便和購買行爲產生了強關聯。比如(我只是比如),20~30歲的女性用戶更傾向於購買護膚品,這就叫交叉屬性。通過反覆測試和經驗,我們可以調整特徵屬性的組合,擬合出最準確的迴歸函數。最後得出的屬性權重如下:

屬性 權重
province 0.07
posX age 0.38
qq_age X provice 0.12
gender x age 0.70

混合算法

現實應用中,其實很少有直接用某種算法來做推薦的系統。我們可以通過給不同算法的結果加權重來綜合結果,或者是在不同的計算環節中運用不同的算法來混合,達到更貼合自己業務的目的。

結果列表

在算法最後得出推薦結果之後,我們往往還需要對結果進行處理。若數次推薦後用戶依然對某個item毫無興趣,我們就需要將這個item降低權重,調整排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章