推薦算法集合
之前寫過一個樓盤的推薦算法,感覺設計還是還蠻不錯的,但是有一個缺點就是可以作爲的參考的參數,太少,在前面的推薦算法中,只有一個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降低權重,調整排序。