協同過濾簡介
-
協同過濾算法(collaborative filtering),協同過濾簡寫爲cf,這就是user-cf,item-cf的簡寫來歷.
-
CF算法的原理是彙總所有<用戶,物品>的行爲對,行爲是評分(顯式)或者是行爲次數(隱式), 是集體智慧的體現。
- 顯式的用戶反饋:這類是用戶在網站上自然瀏覽或者使用網站以外,顯式地提供反饋信息,例如用戶對物品的評分或者對物品的評論,一版常見場景都是寫的幾星幾星的。
- 隱式的用戶反饋:這類是用戶在使用網站是產生的數據,不是用戶主動填寫評分信息,數據隱式地反映了用戶對物品的喜好,例如用戶購買了某物品,用戶查看了某物品的信息等等,一版都是次數,然後做歸一化處理。
-
通俗一點就像是你和你的哥們都愛飆車,他又愛玩德州,因爲你們有共同愛好,你們比較相似,所以你也可能喜歡玩德州,就把德州推薦給你 ,你們和哥們成爲哥們很大原因是你們有共同愛好,就是你們的特徵相似。(User-Based CF)。
-
另外還有一個例子,比如兩本書,第一本spark core講解,第二本spark mllib,當你購買第一本的時候,我會給你推薦第二本,這兩本書相似,相似是通過用戶對書的喜歡提取出來的。(Item-Based CF)
協同過濾算法分類
基於領域的協同過濾算法
- 這類算法的主要思想是利用<user,item>的打分矩陣, 利用統計信息計算用戶和用戶, item和item之間的相似度。然後再利用相似度排序, 最終得出推薦結果。
- 基於用戶的協同過濾算法
- 基於用戶對物品的偏好找到鄰居用戶,然後將鄰居用戶喜歡的推薦給當前用戶。數學上,就是將一個用戶對所有物品的偏好作爲一個向量來計算用戶之間的相似度,找到 Topn鄰居後,根據鄰居的相似度權重以及他們對物品的偏好,預測當前用戶沒有偏好的未涉及物品,計算得到一個排序的物品列表作爲推薦。
- 基於物品的協同過濾算法
- 基於物品的系統過濾的原理和基於用戶的協同過濾類似,只是在計算鄰居時採用物品本身,而不是從用戶的角度,即基於用戶對物品的偏好找到相似的物品,然後根據用戶的歷史偏好,推薦相似的物品給他。數學上,就是將所有用戶對某個物品的偏好作爲一個向量來計算物品之間的相似度,得到物品的相似物品後,根據用戶歷史的偏好預測當前用戶還沒有表示偏好的物品,計算得到一個排序的物品列表作爲推薦。
- 存在問題點
- 用戶數或者商品數變得巨大的時候,就變得運算量巨大,以至於無法運算
- 矩陣太稀疏,特徵較少,用戶一般評價商品數也不多
- 用戶也習慣善於吐槽,不太善於表揚
基於模型的協同過濾算法
- 基於矩陣分解和潛在語義的協同過濾算法
- 基於貝葉斯網絡的協同過濾算法
- 基於SVM的協同過濾算法
- 此處不做模型詳細介紹,後面會單獨講解
- spark mllib中實現了交替最小二乘法(ALS)協同過濾算法,其中也是對矩陣進行分解計算
相似度算法
歐式(歐幾里得)距離相似度
- 歐式距離相似度就是計算兩個點直接距離,距離越大相似度越小,就是二位平面幾何兩點距離的一個推廣,在n維空間依然適用.
餘弦相似度
- 餘弦距離,也稱爲餘弦相似度,是用向量空間中兩個向量餘弦值作爲衡量兩個個體間差異大小的度量值,即兩個向量之間的夾角大小,二維和n維都適用.
皮爾遜相關係數
- 皮爾遜相關係數是比歐幾里德距離更加複雜的可以判斷人們興趣的相似度的一種方法。
- pearson相似度與歐式距離相似度的最大區別在於它比歐式距離更重視數據集的整體性;因爲pearson相似度計算的是相對距離,歐式距離計算的是絕對距離。
- 就實際應用來說,有不同量綱和單位的數據集適合使用pearson相似度來計算,相同量綱和單位的數據集適合使用歐氏距離。
Jaccard公式
- Jaccard係數主要用於計算符號度量或布爾值度量的個體間的相似度,因爲個體的特徵屬性都是由符號度量或者布爾值標識,因此無法衡量差異具體值的大小,只能獲得“是否相同”這個結果,所以Jaccard係數只關心個體間共同具有的特徵是否一致這個問題。如果比較X與Y的Jaccard相似係數,只比較xn和yn中相同的個數。
優勢與劣勢
優勢
- 千人千面,不同人的得到不同的個性化推薦結果.
- 能起到意想不到的推薦效果, 經常能推薦出來一些驚喜結果,尤其是user-base cf.
- 進行有效的長尾item,可以是推薦的內容更爲均勻,不像基於熱度的推薦,會出現數據熱點過熱
- 只依賴用戶行爲, 可以脫離繁重業務, 使用範圍廣.
劣勢
- 冷啓動問題,開始需要大量的<user,item>行爲數據
- 對於推薦結果很難給出合理的推薦解釋,有時候甚至得到一些特別奇怪的結果