推薦算法入門


推薦算法大致能夠分為下面幾類

  • 基於流行度的算法
  • 協同過濾算法(user-based CF and item-based CF)
  • 基於內容的算法(content-based)
  • 基於模型的算法
  • 混合算法

1. 基於流行度的算法

能夠依照一個項目的流行度進行排序,將最流行的項目推薦給用戶。比方在微博推薦中。將最為流行的大V用戶推薦給普通用戶。

微博每日都有最熱門話題榜等等。
算法十分簡單,通過簡單熱度排序就可以。

文章> Predict Whom One Will Follow:Followee Recommendation in Microblogs中推薦好友有一部分採取的策略是Item-popularity.通過計算在訓練集中項目(能夠是人、群組、公眾號)被接受的次數來得到項目的流行度信息。


文章> A Social and Popularity-based Tag Recommender通過結合標簽的流行度和另據意見向用戶推薦標簽。

  • 缺點:無法提供個性化推薦
  • 長處:算法簡單。對於新注冊的用戶比較有效
  • 改進或者新的思路:增加用戶分群的流行度排序。比如把熱榜上的體育內容優先推薦給體育迷。這里能否夠考慮社區發現 聚類等算法??

2.協同過濾算法

協同過濾算法(Collaborative Filtering, CF)是非經常常使用的一種算法。在非常多電商站點上都實用到。CF算法包含基於用戶的CF(User-based CF)和基於物品的CF(Item-based CF)。

2.1 基於用戶的CF

1、分析各個用戶對item的評價(通過瀏覽記錄、購買記錄等);
2、依據用戶對item的評價計算得出全部用戶之間的類似度。
3、選出與當前用戶最類似的N個用戶。
4、將這N個用戶評價最高而且當前用戶又沒有瀏覽過的item推薦給當前用戶。
首先我們依據站點的記錄計算出一個用戶與item的關聯矩陣。例如以下,以微博數據為例
這里寫圖片描寫敘述

圖中,行是不同的用戶,列是全部物品,(x, y)的值則是x用戶對y物品的評分(喜好程度)。我們能夠把每一行視為一個用戶對物品偏好的向量。然后計算每兩個用戶之間的向量距離。這里我們用余弦類似度來算:
這里寫圖片描寫敘述

然后得出用戶向量之間類似度例如以下,當中值越接近1表示這兩個用戶越類似:
這里寫圖片描寫敘述

最后,我們要為用戶1推薦物品,則找出與用戶1類似度最高的N名用戶(設N=2)評價的物品,去掉用戶1評價過的物品。則是推薦結果。


基於物品的CF原理大同小異。僅僅是主體在於物品:

1、分析各個用戶對item的瀏覽記錄。
2、依據瀏覽記錄分析得出全部item之間的類似度;
3、對於當前用戶評價高的item。找出與之類似度最高的N個item。
4、將這N個item推薦給用戶。
2、基於物品的CF

計算方式大致同樣。僅僅是關聯矩陣變為了item和item之間的關系,若用戶同一時候瀏覽過item1和item2,則(1,1)的值為1。最后計算出全部item之間的關聯關系例如以下:
對於微博數據集,item能夠指的是被關注者(followee),而item之間的類似度能夠通過用戶對於item的行為來統計。假設用戶對於item有過行為,則能夠令偏好值為1。針對用戶關注行為列表,能夠通過統計item在用戶關注列表中的共現次數來計算。


這里寫圖片描寫敘述
長處:算法簡單,一定程度上准確率高
缺點:

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

    -

3 基於內容的算法

大量的語料庫中通過計算(比方典型的TF-IDF算法),我們能夠算出新聞中每個關鍵詞的權重。在計算類似度時引入這個權重的影響,就能夠達到更精確的效果。
利用word2vec一類工具,能夠將文本的關鍵詞聚類,然后依據topic將文本向量化。

如能夠將德甲、英超、西甲聚類到“足球”的topic下。將lv、Gucci聚類到“奢侈品”topic下,再依據topic為文本內容與用戶作類似度計算。
利用word2vec一類工具,能夠將文本的關鍵詞聚類。然后依據topic將文本向量化。如能夠將德甲、英超、西甲聚類到“足球”的topic下,將lv、Gucci聚類到“奢侈品”topic下,再依據topic為文本內容與用戶作類似度計算。

4 基於模型的算法

基於模型的方法有非常多。用到的諸如機器學習的方法也能夠非常深,這里僅僅簡介下比較簡單的方法——Logistics回歸預測。我們通過分析系統中用戶的行為和購買記錄等數據,得到例如以下表:
這里寫圖片描寫敘述
中的行是一種物品,x1~xn是影響用戶行為的各種特征屬性。如用戶年齡段、性別、地域、物品的價格、類別等等,y則是用戶對於該物品的喜好程度,能夠是購買記錄、瀏覽、收藏等等。通過大量這類的數據,我們能夠回歸擬合出一個函數,計算出x1~xn相應的系數。這即是各特征屬性相應的權重,權重值越大則表明該屬性對於用戶選擇商品越重要。

在擬合函數的時候我們會想到,單一的某種屬性和還有一種屬性可能並不存在強關聯。

比方,年齡與購買護膚品這個行為並不呈強關聯,性別與購買護膚品也不強關聯,但當我們把年齡與性別綜合在一起考慮時,它們便和購買行為產生了強關聯。比方(我僅僅是比方),20~30歲的女性用戶更傾向於購買護膚品,這就叫交叉屬性。通過重復測試和經驗,我們能夠調整特征屬性的組合。擬合出最准確的回歸函數。最后得出的屬性權重例如以下:
這里寫圖片描寫敘述

基於模型的算法因為高速、准確,適用於實時性比較高的業務如新聞、廣告等。而若是須要這樣的算法達到更好的效果,則須要人工干預重復的進行屬性的組合和篩選,也就是常說的Feature Engineering。

而因為新聞的時效性。系統也須要重復更新線上的數學模型,以適應變化。

5 混合算法

現實應用中,事實上非常少有直接用某種算法來做推薦的系統。

在一些大的站點如Netflix。就是融合了數十種算法的推薦系統。我們能夠通過給不同算法的結果加權重來綜合結果,或者是在不同的計算環節中運用不同的算法來混合,達到更貼合自己業務的目的。


免責聲明!

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



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