1. 程式人生 > >推薦系統-Recommendation System-CF/SlopeOne/MF

推薦系統-Recommendation System-CF/SlopeOne/MF

本文結構安排

  • Item-Based Collaboration Filtering
  • Slope One
  • Matrix Factorization

Item-based Collaboration Filtering

推薦系統本質是在使用者需求不明確的情況下,解決資訊過載的問題,聯絡使用者和資訊,一方面幫助使用者發現對自己有價值的資訊,另一方面讓資訊能夠展現在對它感興趣的使用者面前,從而實現資訊消費者和資訊生產者的雙贏(這裡的資訊的含義可以非常廣泛,比如諮詢、電影和商品等,統稱為item)

協同過濾主要分為基於鄰域以及基於隱語義模型。基於鄰域的演算法中,Item-based CF應用廣泛,其主要思想為“喜歡item A的使用者大都喜歡使用者 item B”,通過挖掘使用者歷史的操作日誌,利用群體智慧,生成item的候選推薦列表。
原理是通過將使用者和其他使用者的資料進行比對來實現推薦的。比對的具體方法就是通過計算兩個使用者資料之間的相似性,通過相似性的計算來說明兩個使用者資料之間的相似程度。相似度函式的設計必須滿足度量空間的三點要求,即非負性,對稱性和三角不等性。常用的相似度的計算方法有:歐式距離法、皮爾遜相關係數法和夾角餘弦相似度法。

User-based的基本思想是如果使用者A喜歡物品a,使用者B喜歡物品a、b、c,使用者C喜歡a和c,那麼認為使用者A與使用者B和C相似,因為他們都喜歡a,而喜歡a的使用者同時也喜歡c,所以把c推薦給使用者A。該演算法用最近鄰居(nearest-neighbor)演算法找出一個使用者的鄰居集合,該集合的使用者和該使用者有相似的喜好,演算法根據鄰居的偏好對該使用者進行預測。

User-based演算法存在兩個重大問題:1. 資料稀疏性。一個大型的電子商務推薦系統一般有非常多的物品,使用者可能買的其中不到1%的物品,不同使用者之間買的物品重疊性較低,導致演算法無法找到一個使用者的鄰居,即偏好相似的使用者。2. 演算法擴充套件性。最近鄰居演算法的計算量隨著使用者和物品數量的增加而增加,不適合資料量大的情況使用。

Iterm-based的基本思想是預先根據所有使用者的歷史偏好資料計算物品之間的相似性,然後把與使用者喜歡的物品相類似的物品推薦給使用者。還是以之前的例子為例,可以知道物品a和c非常相似,因為喜歡a的使用者同時也喜歡c,而使用者A喜歡a,所以把c推薦給使用者A。

因為物品直接的相似性相對比較固定,所以可以預先線上下計算好不同物品之間的相似度,把結果存在表中,當推薦時進行查表,計算使用者可能的打分值,可以同時解決上面兩個問題。

Item-based演算法詳細過程:

1、相似度計算:Item-based演算法首選計算物品之間的相似度,計算相似度的方法有以下幾種:

(1). 基於餘弦(Cosine-based)的相似度計算,通過計算兩個向量之間的夾角餘弦值來計算物品之間的相似性

c o s X , Y = X Y X Y = i = 1 n ( x i y i ) i = 1 n x i 2 i = 1 n y i 2 cos_{}{X,Y} = \frac{XY}{||X|| * ||Y||} = \frac{\sum_{i=1}^{n}(x_{i} * y_{i})}{\sqrt{\sum_{i=1}^{n}x_{i}^{2}} * \sqrt{\sum_{i=1}^{n}y_{i}^{2}}}

(2). 基於關聯(Correlation-based)的相似度計算,計算兩個向量之間的Pearson-r關聯度

P X , Y = c o v ( X , Y ) σ x σ y = E ( ( X μ x ) ( Y μ y ) ) σ x σ y = u U ( R u , i R ˉ i ) ( R u , j R ˉ j ) u U ( R u , i R ˉ i ) 2 u U ( R u , j R ˉ j ) 2 P_{X,Y}=\frac{cov(X,Y)}{\sigma_{x}\sigma_{y}} = \frac{E((X-\mu_{x})(Y-\mu_{y}))}{\sigma_{x}\sigma_{y}} = \frac{\sum_{u \in U}^{ }(R_{u,i}-\bar{R}_{i})(R_{u,j}-\bar{R}_{j})} {\sqrt{\sum_{u \in U}^{ }(R_{u,i}-\bar{R}_{i})^{2}} * \sqrt{\sum_{u \in U}^{ }(R_{u,j}-\bar{R}_{j})^{2}}}

2、\textbf{預測值計算}:加權求和. 用過對使用者u已打分的物品的分數進行加權求和,權值為各個物品與物品i的相似度,然後對所有物品相似度的和求平均,計算得到使用者u對物品i打分

P u , i = R ˉ i + j N ( i : u ) s i m ( i , j ) ( R u , j R ˉ j ) j N ( i : u ) s i m ( i , j ) P_{u,i} = \bar{R}_{i} + \frac{\sum_{j \in N(i:u)}^{ }sim(i,j)*(R_{u,j}-\bar{R}_{j})}{\sum_{j \in N(i:u)}^{ }|sim(i,j)|}

Slope One

簡單高效的協同過濾演算法。Slope One 和其它類似演算法相比, 它的最大優點在於演算法很簡單, 易於實現, 執行效率高, 同時推薦的準確性相對很高。

Slope One演算法是基於不同物品之間的評分差的線性演算法,預測使用者對物品評分的個性化演算法。主要兩步:

Step1:計算物品之間的評分差的均值,記為物品間的評分偏差(兩物品同時被評分);

R ( i j ) = u N ( i ) N ( j ) ( R u , i R u , j ) N ( i ) N ( j ) = u N ( i )