在現今的推薦技術和演算法中,最被大家廣泛認可和採用的就是基於協同過濾的推薦方法。
本文將帶你深入了解協同過濾的秘密。下面直接進入正題
1 什麼是協同過濾
協同過濾是利用集體智慧型的乙個典型方法。要理解什麼是協同過濾 (collaborative filtering, 簡稱 cf),首先想乙個簡單的問題,如果你現在想看個電影,但你不知道具體看哪部,你會怎麼做?大部分的人會問問周圍的朋友,看看最近有什麼好看的電影推薦,而我們一般更傾向於從口味比較類似的朋友那裡得到推薦。這就是協同過濾的核心思想。
換句話說,就是借鑑和你相關人群的觀點來進行推薦,很好理解。
2 協同過濾的實現
要實現協同過濾的推薦演算法,要進行以下三個步驟:
收集資料——找到相似使用者和物品——進行推薦
收集資料
找到相似使用者和物品
這一步也很簡單,其實就是計算使用者間以及物品間的相似度。以下是幾種計算相似度的方法:
歐幾里德距離
皮爾遜相關係數
cosine 相似度
tanimoto 係數
3 相似鄰居的計算
介紹完相似度的計算方法,下面我們看看如何根據相似度找到使用者 - 物品的鄰居,常用的挑選鄰居的原則可以分為兩類:圖 1 給出了二維平面空間上點集的示意圖。
不論鄰居的「遠近」,只取最近的 k 個,作為其鄰居。如圖 1 中的 a,假設要計算點 1 的 5- 鄰居,那麼根據點之間的距離,我們取最近的 5 個點,分別是點 2,點 3,點 4,點 7 和點 5。但很明顯我們可以看出,這種方法對於孤立點的計算效果不好,因為要取固定個數的鄰居,當它附近沒有足夠多比較相似的點,就被迫取一些不太相似的點作為鄰居,這樣就影響了鄰居相似的程度,比如圖 1 中,點 1 和點 5 其實並不是很相似。
與計算固定數量的鄰居的原則不同,基於相似度門檻的鄰居計算是對鄰居的遠近進行最大值的限制,落在以當前點為中心,距離為 k 的區域中的所有點都作為當前點的鄰居,這種方法計算得到的鄰居個數不確定,但相似度不會出現較大的誤差。如圖 1 中的 b,從點 1 出發,計算相似度在 k 內的鄰居,得到點 2,點 3,點 4 和點 7,這種方法計算出的鄰居的相似度程度比前一種優,尤其是對孤立點的處理。
圖 1.相似鄰居計算示意圖
4 進行推薦
在知道了如何計算相似度後,就可以進行推薦了。
在協同過濾中,有兩種主流方法:基於使用者的協同過濾,和基於物品的協同過濾。具體怎麼來闡述他們的原理呢,看個圖大家就明白了
基於使用者的 cf 的基本思想相當簡單,基於使用者對物品的偏好找到相鄰鄰居使用者,然後將鄰居使用者喜歡的推薦給當前使用者。計算上,就是將乙個使用者對所有物品的偏好作為乙個向量來計算使用者之間的相似度,找到 k 鄰居後,根據鄰居的相似度權重以及他們對物品的偏好,**當前使用者沒有偏好的未涉及物品,計算得到乙個排序的物品列表作為推薦。 下圖給出了乙個例子,對於使用者 a,根據使用者的歷史偏好,這裡只計算得到乙個鄰居 - 使用者 c,然後將使用者 c 喜歡的物品 d 推薦給使用者 a。
5 總結
以上兩個方法都能很好的給出推薦,並可以達到不錯的效果。但是他們之間還是有不同之處的,而且適用性也有區別。下面進行一下對比
計算複雜度
適用場景
在非社交網路的**中,內容內在的聯絡是很重要的推薦原則,它比基於相似使用者的推薦原則更加有效。比如在購書**上,當你看一本書的時候,推薦引擎會給你推薦相關的書籍,這個推薦的重要性遠遠超過了**首頁對該使用者的綜合推薦。可以看到,在這種情況下,item cf 的推薦成為了引導使用者瀏覽的重要手段。同時 item cf 便於為推薦做出解釋,在乙個非社交網路的**中,給某個使用者推薦一本書,同時給出的解釋是某某和你有相似興趣的人也看了這本書,這很難讓使用者信服,因為使用者可能根本不認識那個人;但如果解釋說是因為這本書和你以前看的某本書相似,使用者可能就覺得合理而採納了此推薦。
相反的,在現今很流行的社交網路站點中,user cf 是乙個更不錯的選擇,user cf 加上社會網路資訊,可以增加使用者對推薦解釋的信服程度。
推薦多樣性和精度
研究推薦引擎的學者們在相同的資料集合上分別用 user cf 和 item cf 計算推薦結果,發現推薦列表中,只有 50% 是一樣的,還有 50% 完全不同。但是這兩個演算法確有相似的精度,所以可以說,這兩個演算法是很互補的。
關於推薦的多樣性,有兩種度量方法:
第一種度量方法是從單個使用者的角度度量,就是說給定乙個使用者,檢視系統給出的推薦列表是否多樣,也就是要比較推薦列表中的物品之間兩兩的相似度,不難想到,對這種度量方法,item cf 的多樣性顯然不如 user cf 的好,因為 item cf 的推薦就是和以前看的東西最相似的。
第二種度量方法是考慮系統的多樣性,也被稱為覆蓋率 (coverage),它是指乙個推薦系統是否能夠提供給所有使用者豐富的選擇。在這種指標下,item cf 的多樣性要遠遠好於 user cf, 因為 user cf 總是傾向於推薦熱門的,從另乙個側面看,也就是說,item cf 的推薦有很好的新穎性,很擅長推薦長尾裡的物品。所以,儘管大多數情況,item cf 的精度略小於 user cf, 但如果考慮多樣性,item cf 卻比 user cf 好很多。
從上面的分析,可以很清晰的看到,這兩種推薦都有其合理性,但都不是最好的選擇,因此他們的精度也會有損失。其實對這類系統的最好選擇是,如果系統給這個使用者推薦 30 個物品,既不是每個領域挑選 10 個最熱門的給他,也不是推薦 30 個 a 領域的給他,而是比如推薦 15 個 a 領域的給他,剩下的 15 個從 b,c 中選擇。所以結合 user cf 和 item cf 是最優的選擇,結合的基本原則就是當採用 item cf 導致系統對個人推薦的多樣性不足時,我們通過加入 user cf 增加個人推薦的多樣性,從而提高精度,而當因為採用 user cf 而使系統的整體多樣性不足時,我們可以通過加入 item cf 增加整體的多樣性,同樣同樣可以提高推薦的精度。
協同過濾推薦演算法 協同過濾推薦演算法總結
推薦演算法具有非常多的應用場景和商業價值,因此對推薦演算法值得好好研究。推薦演算法種類很多,但是目前應用最廣泛的應該是協同過濾類別的推薦演算法,本文就對協同過濾類別的推薦演算法做乙個概括總結,後續也會對一些典型的協同過濾推薦演算法做原理總結。推薦演算法概述 1 基於內容的推薦 這一類一般依賴於自然語...
推薦系統 協同過濾演算法
協同過濾,collaborative filtering,簡稱cf,廣泛應用於如今的推薦系統中。通過協同過濾演算法,可以算出兩個相似度 user user相似度矩陣 item item相似度矩陣。為什麼叫做協同過濾?是因為這兩個相似度矩陣是通過對方來計算出來的。舉個栗子 100個使用者同時購買了兩種...
推薦系統 協同過濾演算法
推薦系統構建三大方法 基於內容的推薦content based,協同過濾collaborative filtering,隱語義模型 lfm,latent factor model 推薦。這篇部落格主要講協同過濾。推薦系統 協同過濾collaborative filtering 協同過濾 collab...