協同過濾 Collaborative Filtering

協同過濾 collaborative filteringhtml

人以類聚,物以羣分算法

 

類似度網絡

1. Jaccard 類似度函數

定義爲兩個集合的交併比:post

 

Jaccard 距離,定義爲 1 - J(A, B),衡量兩個集合的區分度:學習

爲何 Jaccard 不適合協同過濾?—— 只考慮用戶有沒有看過,沒考慮評分大小 優化

 

2. 餘弦類似度spa

根據兩個向量夾角的餘弦值來衡量類似度:3d

 

爲何餘弦類似度不適合協同過濾?—— 不一樣用戶各自評分總和不同,致使評分佔總比不同,可能計算出和事實相反的結果。htm

 

3. Pearson 類似度

解決餘弦類似度中的類似度差別問題,又稱中心餘弦算法。先中心化,再算餘弦類似度,這樣正值表示正相關,負值表示負相關。

 

 

 

基於用戶的協同過濾

經過用戶對物品的喜好程度進行度量和打分。根據不一樣用戶對相同商品或內容的態度進行商品推薦。

舉例說明,每一個行向量表示某個用戶對全部電影的評分 

 

先把數據中心化

 

而後計算用戶 A 和其餘用戶的 Pearson 相關係數:

能夠發現用戶 A 和用戶 B 喜愛接近,所以能夠將 B 喜歡但 A 沒看過的密室推薦給 A,同時也能夠將 A 喜歡但 B 沒看過的火焰杯推薦給 B。

 

用戶法存在的問題:

  1. 數據稀疏性。物品太多,不一樣用戶之間買的物品重疊性較低,致使沒法找到一個偏好類似的用戶

  2. 算法擴展性。最近鄰算法的計算量隨着用戶和物品數量的增長而增長,不適合數據量大的狀況使用。

 

 

基於物品的協同過濾

 

經過計算不一樣用戶對於不一樣物品的評分,得到物品間的關係。基於物品間的關係對用戶進行類似物品的推薦。

舉例說明,每個行向量表示某個物品被各個用戶的評分,先中心化

 

如何預測用戶 E 對 哈利波特的喜愛程度?計算哈利波特和其餘電影之間的 Pearson 相關係數

 

選擇相關性較大的其餘電影,拿出用戶 E 對這些電影的評分,利用 Pearson 相關係數作 weighted sum:

 

從原理上看,基於用戶或基於物品都是能夠的,但實踐中以物品爲基礎效果更好,且須要不多的數據就能夠進行預測,用戶法須要大量數據。 

 

基於模型的協同過濾 

主流方法主要有如下幾種。先佔坑,慢慢補吧

1. 關聯算法

Apriori,FP Tree 和 PrefixSpan

劉建平老師的博客:

Apriori算法原理總結

FP Tree算法原理總結

PrefixSpan算法原理總結 

 

2. 聚類

K-means,譜聚類, BIRCH 和 DBSCAN

以後本身總結一下 k-means 和譜聚類

 

BIRCH聚類算法原理

DBSCAN密度聚類算法

 

3. 矩陣分解

Matrix Factorization

要處理的數據樣式

要先作 encoding,把 categorical features 轉換爲 numerical features。最簡單就是 one-hot encoding,把 id 映射成 binary vector。

某個用戶沒看過的電影,評分就是空出來的。

 

 

 

用線性網絡來預測評分的話,須要兩個矩陣(兩層的權重參數)。每個 user 在隱含層的輸出就至關於直接從 V 中查表。至關於作了一次映射、一次線性組合。

 

訓練的目標函數呢?—— 均方偏差唄

 

 

比較直接的想法就是,乾脆把 R 矩陣分解成兩個矩陣相乘的形式就行了。根據已有的評分來學習 W 和 V 的參數。

 

優化方法:

 

1. 目標函數以下所示,交替更新 W 和 V 的參數(若是把 R 轉置,其實 W 和 V 從形式上就是對稱的)。

 

這種優化方法叫作交替最小二乘,能獲得局部最優解。

 

 

 

2.直接用 SGD,更有效率。

 

梯度公式:

 

優化過程:

 

 

SVD 協同過濾

 

奇異值矩陣的特徵值按照從大到小排列且迅速減少,能夠把大矩陣用三個小矩陣來近似描述,實現降維和去噪,應用於協同過濾中能夠減小計算量。

用 K 維 SVD 分解作協同過濾,實際上就是找一組 latent variables,U 和 V 分別描述了物品與隱變量、用戶與隱變量之間的關係。 而後就能夠都在 latent space 中表示。

 

舉例說明,4 個用戶對 6 部電影的評分狀況

 

作二維 SVD 分解:

 

在 latent space 中表示用戶和電影,發現電影之間、用戶之間、電影和用戶之間,均可以衡量中心餘弦類似度。

 

若是出現一個新用戶,如何給他推薦他沒有看過的電影?

 

把新用戶投影到 latent space

 

找到和新用戶類似度高的用戶,把類似用戶評分高而新用戶沒看過的電影,按類似用戶的評分高低順序前後推薦給新用戶便可。

 

 

Factorization Machine

http://www.javashuo.com/article/p-erzdckir-bz.html

 

4. 分類算法

LR(可解釋性強,便於作特徵工程),樸素貝葉斯

GBDT

 

5. 迴歸算法

Ridge,  決策樹,支持向量迴歸

 

6. 神經網絡

YouTube Recommendation System 引出的一系列基於 NN 的推薦模型

 

7. 圖模型

SimRank,馬爾可夫模型

 

8. 隱語義模型

 LSA,LDA

相關文章
相關標籤/搜索