本文主要參考:Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model算法
在用戶對本身需求相對明確的時候,用搜索引擎很方便的經過關鍵字搜索很快的找到本身須要的信息。但搜索引擎並不能徹底知足用戶對信息發現的需求,那是由於在不少狀況下,用戶其實並不明確本身的須要,或者他們的需求很難用簡單的關鍵字來表述。又或者他們須要更加符合他們我的口味和喜愛的結果,所以出現了推薦系統,與搜索引擎對應,你們也習慣稱它爲推薦引擎。網站
推薦系統一般依賴於協同過濾(Collaborative Filtering),從海量數據中發掘出一小部分與你口味相近的產品推薦給你。本文主要介紹協同過濾的兩種方式: 隱語義模型(Latent factor models)和鄰域模型(neighborhood model).ui
首先考慮基於鄰域的協同過濾模型, 加入baseline 估計搜索引擎
這是考慮在實際狀況下,一個評分系統有些固有屬性和用戶物品無關,而用戶也有些屬性和物品無關,物品也有些屬性和用戶無關。所以,μ爲訓練集中全部記錄的評分的全局平均數,表示網站自己對用戶評分的影響。 bu 爲用戶偏置項,表示在用戶評分習慣中和物品無關的因素,若有些用戶偏苛刻,廣泛評分較低而有些用戶比較寬容,評分偏高。 bi 爲物品偏置項,表示物品接受評分中和用戶無關的因素,例如物品自己質量很高,所以得到評分廣泛比較高。google
cij 與 wij 相似,對於兩個物品i和j,一個用戶u對物品j的正隱性反饋信息會在模型中修正預測值 rui ,給出一個更高的預測值。將這些權值視爲baseline的偏移,而非基於用戶或者基於項目的係數,便強化了缺失評分值的影響,即用戶的預測評分不只與其評分歷史數據相關,同時與他未評分的物品相關,特別是那些相對熱門,而用戶並未評分的物品。例如,假設一個電影評分數據集顯示那些對"指環王3"評分較高的用戶一般對"指環王1-2"的評分也相對較高,這就使得"指環王3"與"指環王1-2"之間有很高的權值。假設一個用戶沒有對"指環王1-2"進行評分,那麼他對"指環王3"的預測評分會變低,由於相應的權值 cij 在模型中爲0。設計
利用這個模型預測出來的值有時候會不怎麼精確,即得出來的結果非0即1.爲此咱們須要對結果進行平滑處理,以下式:3d
其中R(u)表明顯示因子,N(u)是隱式因子,例如R(u)爲某用戶打過評分的電影,N(u)是某用戶看過但沒有評分的電影。blog
但若是用戶看過不少電影的狀況下,對上述模型進行訓練,複雜度會增長。而其實咱們能夠只保留類似度最高的k部電影來訓練,類似度的評估能夠用餘弦定理求得。獲得最終的預測公式:排序
如今使用隨機梯度降低(Stochastic gradient descent)來最小化下式索引
其中e_ui是真實值r_ui與預測值的差值。
Latent factor model中比較著名的算法即SVD,對於一個給定的用戶行爲數據集(數據集包含的是全部的user, 全部的item,以及每一個user有過行爲的item列表),使用LFM對其建模後,咱們能夠獲得以下圖所示的模型:
R矩陣是user-item矩陣,矩陣值Rij表示的是user i 對item j的興趣度,這正是咱們要求的值。對於一個user來講,當計算出他對全部item的興趣度後,就能夠進行排序並做出推薦。LFM算法從數據集中抽取出若干主題,做爲user和item之間鏈接的橋樑,將R矩陣表示爲P矩陣和Q矩陣相乘。其中P矩陣是user-class矩陣,矩陣值Pij表示的是user i對class j的興趣度;Q矩陣式class-item矩陣,矩陣值Qij表示的是item j在class i中的權重,權重越高越能做爲該類的表明。因此LFM根據以下公式來計算用戶U對物品I的興趣度。
咱們在上述式子中加入上文提到的N(u),獲得:
這個就是SVD++了,裏面的y叫作implicit feedback factor,爲這個值的意思google了很久,囧。
下面是對於這兩種方法的優缺點,英文很差,沒法用中文準確的表達出來……。
Neighborhood models are most effective at detecting very localized relationships. They rely on a few significant neighborhood relations, often ignoring the vast majority of ratings by a user. Consequently ,these methods are unable to capture the totality of weak signals encompassed in all of a user's ratings. Latent factor models are generally effective at estimating overall structure that relates simultaneously to most or all items. However, these models are poor at detecting strong associations among a small set of closely related items, precisely where neighborhood models do best.
根據二者的優缺點,咱們把它們聯合起來訓練獲得:
相應的梯度降低:
最後介紹下當前的推薦系統實際應用。
以Amazon爲例,做爲推薦引擎的鼻祖,它已經將推薦的思想滲透在應用的各個角落。Amazon 推薦的核心是經過數據挖掘算法和比較用戶的消費偏好於其餘用戶進行對比,藉以預測用戶可能感興趣的商品。對應於上面介紹的各類推薦機制,Amazon 採用的是分區的混合的機制,並將不一樣的推薦結果分不一樣的區顯示給用戶,下凸展現了用戶在 Amazon 上能獲得的推薦。
Amazon 利用能夠記錄的全部用戶在站點上的行爲,根據不一樣數據的特色對它們進行處理,並分紅不一樣區爲用戶推送推薦:
今日推薦 (Today's Recommendation For You): 一般是根據用戶的近期的歷史購買或者查看記錄,並結合時下流行的物品給出一個折中的推薦。
新產品的推薦 (New For You): 採用了基於內容的推薦機制 (Content-based Recommendation),將一些新到物品推薦給用戶。在方法選擇上因爲新物品沒有大量的用戶喜愛信息,因此基於內容的推薦能很好的解決這個"冷啓動"的問題。
捆綁銷售 (Frequently Bought Together): 採用數據挖掘技術對用戶的購買行爲進行分析,找到常常被一塊兒或同一我的購買的物品集,進行捆綁銷售,這是一種典型的基於項目的協同過濾推薦機制。
別人購買 / 瀏覽的商品 (Customers Who Bought/See This Item Also Bought/See): 這也是一個典型的基於項目的協同過濾推薦的應用,經過社會化機制用戶能更快更方便的找到本身感興趣的物品。
值得一提的是,Amazon 在作推薦時,設計和用戶體驗也作得特別獨到:
Amazon 利用有它大量歷史數據的優點,量化推薦緣由。
基於社會化的推薦,Amazon 會給你事實的數據,讓用戶信服,例如:購買此物品的用戶百分之多少也購買了那個物品;
基於物品自己的推薦,Amazon 也會列出推薦的理由,例如:由於你的購物框中有 ***,或者由於你購買過 ***,因此給你推薦相似的 ***。
另外,Amazon 不少推薦是基於用戶的 profile 計算出來的,用戶的 profile 中記錄了用戶在 Amazon 上的行爲,包括看了那些物品,買了那些物品,收藏夾和 wish list 裏的物品等等,固然 Amazon 裏還集成了評分等其餘的用戶反饋的方式,它們都是 profile 的一部分,同時,Amazon 提供了讓用戶自主管理本身 profile 的功能,經過這種方式用戶能夠更明確的告訴推薦引擎他的品味和意圖是什麼。