導航:首頁 > 凈水問答 > 協同過濾共現矩陣

協同過濾共現矩陣

發布時間:2023-02-05 07:56:06

⑴ 矩陣分解在協同過濾推薦演算法中的應用

矩陣分解在協同過濾推薦演算法中的應用
推薦系統是當下越來越熱的一個研究問題,無論在學術界還是在工業界都有很多優秀的人才參與其中。近幾年舉辦的推薦系統比賽更是一次又一次地把推薦系統的研究推向了高潮,比如幾年前的Neflix百萬大獎賽,KDD CUP 2011的音樂推薦比賽,去年的網路電影推薦競賽,還有最近的阿里巴巴大數據競賽。這些比賽對推薦系統的發展都起到了很大的推動作用,使我們有機會接觸到真實的工業界數據。我們利用這些數據可以更好地學習掌握推薦系統,這些數據網上很多,大家可以到網上下載。
推薦系統在工業領域中取得了巨大的成功,尤其是在電子商務中。很多電子商務網站利用推薦系統來提高銷售收入,推薦系統為Amazon網站每年帶來30%的銷售收入。推薦系統在不同網站上應用的方式不同,這個不是本文的重點,如果感興趣可以閱讀《推薦系統實踐》(人民郵電出版社,項亮)第一章內容。下面進入主題。
為了方便介紹,假設推薦系統中有用戶集合有6個用戶,即U={u1,u2,u3,u4,u5,u6},項目(物品)集合有7個項目,即V={v1,v2,v3,v4,v5,v6,v7},用戶對項目的評分結合為R,用戶對項目的評分范圍是[0, 5]。R具體表示如下:

推薦系統的目標就是預測出符號「?」對應位置的分值。推薦系統基於這樣一個假設:用戶對項目的打分越高,表明用戶越喜歡。因此,預測出用戶對未評分項目的評分後,根據分值大小排序,把分值高的項目推薦給用戶。怎麼預測這些評分呢,方法大體上可以分為基於內容的推薦、協同過濾推薦和混合推薦三類,協同過濾演算法進一步劃分又可分為基於基於內存的推薦(memory-based)和基於模型的推薦(model-based),本文介紹的矩陣分解演算法屬於基於模型的推薦。
矩陣分解演算法的數學理論基礎是矩陣的行列變換。在《線性代數》中,我們知道矩陣A進行行變換相當於A左乘一個矩陣,矩陣A進行列變換等價於矩陣A右乘一個矩陣,因此矩陣A可以表示為A=PEQ=PQ(E是標准陣)。
矩陣分解目標就是把用戶-項目評分矩陣R分解成用戶因子矩陣和項目因子矩陣乘的形式,即R=UV,這里R是n×m, n =6, m =7,U是n×k,V是k×m。直觀地表示如下:

高維的用戶-項目評分矩陣分解成為兩個低維的用戶因子矩陣和項目因子矩陣,因此矩陣分解和PCA不同,不是為了降維。用戶i對項目j的評分r_ij =innerproct(u_i, v_j),更一般的情況是r_ij =f(U_i, V_j),這里為了介紹方便就是用u_i和v_j內積的形式。下面介紹評估低維矩陣乘積擬合評分矩陣的方法。
首先假設,用戶對項目的真實評分和預測評分之間的差服從高斯分布,基於這一假設,可推導出目標函數如下:

最後得到矩陣分解的目標函數如下:

從最終得到得目標函數可以直觀地理解,預測的分值就是盡量逼近真實的已知評分值。有了目標函數之後,下面就開始談優化方法了,通常的優化方法分為兩種:交叉最小二乘法(alternative least squares)和隨機梯度下降法(stochastic gradient descent)。
首先介紹交叉最小二乘法,之所以交叉最小二乘法能夠應用到這個目標函數主要是因為L對U和V都是凸函數。首先分別對用戶因子向量和項目因子向量求偏導,令偏導等於0求駐點,具體解法如下:

上面就是用戶因子向量和項目因子向量的更新公式,迭代更新公式即可找到可接受的局部最優解。迭代終止的條件下面會講到。
接下來講解隨機梯度下降法,這個方法應用的最多。大致思想是讓變數沿著目標函數負梯度的方向移動,直到移動到極小值點。直觀的表示如下:

其實負梯度的負方向,當函數是凸函數時是函數值減小的方向走;當函數是凹函數時是往函數值增大的方向移動。而矩陣分解的目標函數L是凸函數,因此,通過梯度下降法我們能夠得到目標函數L的極小值(理想情況是最小值)。
言歸正傳,通過上面的講解,我們可以獲取梯度下降演算法的因子矩陣更新公式,具體如下:

(3)和(4)中的γ指的是步長,也即是學習速率,它是一個超參數,需要調參確定。對於梯度見(1)和(2)。
下面說下迭代終止的條件。迭代終止的條件有很多種,就目前我了解的主要有
1) 設置一個閾值,當L函數值小於閾值時就停止迭代,不常用
2) 設置一個閾值,當前後兩次函數值變化絕對值小於閾值時,停止迭代
3) 設置固定迭代次數
另外還有一個問題,當用戶-項目評分矩陣R非常稀疏時,就會出現過擬合(overfitting)的問題,過擬合問題的解決方法就是正則化(regularization)。正則化其實就是在目標函數中加上用戶因子向量和項目因子向量的二范數,當然也可以加上一范數。至於加上一范數還是二范數要看具體情況,一范數會使很多因子為0,從而減小模型大小,而二范數則不會它只能使因子接近於0,而不能使其為0,關於這個的介紹可參考論文Regression Shrinkage and Selection via the Lasso。引入正則化項後目標函數變為:

(5)中λ_1和λ_2是指正則項的權重,這兩個值可以取一樣,具體取值也需要根據數據集調參得到。優化方法和前面一樣,只是梯度公式需要更新一下。
矩陣分解演算法目前在推薦系統中應用非常廣泛,對於使用RMSE作為評價指標的系統尤為明顯,因為矩陣分解的目標就是使RMSE取值最小。但矩陣分解有其弱點,就是解釋性差,不能很好為推薦結果做出解釋。
後面會繼續介紹矩陣分解演算法的擴展性問題,就是如何加入隱反饋信息,加入時間信息等。

⑵ 矩陣分解

為什麼要進行矩陣分解?
1、從矩陣變換的角度:
將復合變換後的矩陣分解成基本變換過程。具體請看奇異值分解之矩陣變換角度。
2、從 研究動機 的角度:

首先要理解基變換(坐標變換)再理解特徵值的本質。
1、如果一個矩陣的行列式為0(非滿秩),其特徵值為0,這個證明比較簡單:

(單位矩陣有時候用 表示,有時候用 表示。)




如果 ,那麼 ,進而
2、對於一個 的矩陣 ,其 ;
3、主對角線上的元素都不為0,其他元素都為0的矩陣叫對角矩陣,對角矩陣一定是正交矩陣,即其基兩兩垂直。

特徵值分解就是矩陣的對角化,就是可以將 分解為 , 是由對應特徵向量組成的矩陣--特徵矩陣, 為對角矩陣,對角線上的元素為 的特徵值。只有在一定條件下,一個變換可以由其特徵值和特徵向量完全表述,也就是說: 所有的特徵向量組成了空間的一組基 。並不是所有方陣都可以對角化,方陣 可以被對角化的條件是 :

正交矩陣一定可以對角化 。以三維空間為例,正交矩陣就是歪著的立方體,對角化就是把這個立方體擺正(就是讓它的某一個頂點放在原點上,同時這個頂點的三條邊放在三條坐標軸上)。對角矩陣就是擺正後的立方體。

機器學習中的特徵值分解, 往往是協方差矩陣,如PCA,所以我們要確保各個特徵之間是線性無關的。

如何通俗地理解奇異值?

我們知道一個向量張成的空間是一條直線, 任意實數 可以得到非零向量 張成的空間是一條直線。那麼如果一個 維空間中的向量 其所張成的空間——一條直線上的點,經過一個矩陣 變換到另一個 的空間中依然在同一條直線上,這個直線是 空間中的向量 所張成的空間,只是會有對應的縮放,這個縮放的程度就是奇異值。用數學形式表達為: , 是 空間中的向量, 是 的變換矩陣, 是 空間中的向量, 就是奇異值。

可以感覺到特徵值是奇異值的特例,當m=n且 和 重疊的時候(方向可以不同),奇異值=特徵值。

奇異值分解計算例子:
https://www.cnblogs.com/marsggbo/p/10155801.html

https://www.hu.com/question/22237507
https://blog.csdn.net/bitcarmanlee/article/details/52662518
https://blog.csdn.net/billbliss/article/details/78559289

SVD(奇異值分解)Python實現: https://www.cnblogs.com/endlesscoding/p/10058532.html

矩陣分解為了解決傳統協同過濾處理稀疏共現矩陣能力差的問題。使用矩陣分解相比傳統協同過濾也提升了泛化性。

基於矩陣分解的模型又叫潛在因素模型、隱語義模型。

矩陣分解的開端是2006年的Netflix競賽。

1、推薦系統中:
分解的是什麼矩陣?共現矩陣
怎麼共現矩陣分解?
1)特徵值分解
要求待分解的是方陣,所以行不通
2)奇異值分解
要求待分解矩陣是稠密矩陣,而共現矩陣是稀疏矩陣,所以不行;
奇異值分解的復雜度是 ,復雜度很高,也不合適。
3)梯度下降法——也就是交替最小二乘法(alternating least squares,ALS),解決兩個變數求解。
使用梯度下降法進行矩陣分解
(1)確定目標函數: ,就是一個MSE;
(2)分別對 和 求偏導
(3)參數更新
(4)迭代
得到隱向量後,對某個用戶進行推薦時,利用該用戶的隱向量與所有物品的隱向量進行逐一內積運算,得到該用戶對所有物品的得分,再進行排序,得到最終的推薦列表。
4)貝葉斯矩陣分解
https://zhuanlan.hu.com/p/26067454

2、PCA---奇異值分解

⑶ 協同過濾與分類

[TOC]

本文是《寫給程序員的數據挖掘實踐指南》的一周性筆記總結。主要涵蓋了以下內容:

所謂推薦系統就是系統根據你的行為操作為你推薦你可能想要的其他物品。這在電商平台、音樂平台、資訊推送平台等多有見到。而協同過濾簡單來說是利用某興趣相投、擁有共同經驗之群體的喜好來推薦用戶感興趣的信息,個人通過合作的機制給予信息相當程度的回應(如評分)並記錄下來以達到過濾的目的進而幫助別人篩選信息。其推薦基礎是用戶評分。這里可以分為兩種用戶評分,即顯式評分與隱式評分。顯式評分即日常見到的為物品打分,如對喜好音樂評級等;隱式評分是通過對用戶行為的持續性觀察,進而發現用戶偏好的一種方法,如新聞網頁中的推送你經常閱讀過的相關內容等。兩種評分方法都有自己的問題。

總體來說,協同過濾其運作機制也可以分為兩種:

基於用戶的推薦是指通過用戶的行為偏好,劃分相似用戶。在相似用戶群體之間互相推送一方喜歡而另一方未有過的物品。核心在於相似用戶群體的劃分。這種推薦方法有自己的局限:

基於用戶的過濾其核心是用戶群體的劃分,其實也就是分類。

這里的距離函數包括三種:曼哈頓距離和歐氏距離。這里以二維舉例,更多維情況下類推即可。

兩距離函數可以一般化為:

其中,當r=1時,函數為曼哈頓距離;當r=2時,函數為歐氏距離。

演算法實現:

在算出距離函數後,通過比對目標用戶與所有用戶群體的偏好,找到最近鄰的用戶並給予推薦。

基於用戶距離的推薦有一個明顯的問題,就是用戶評分體系的差異。比如評分極端的用戶給喜歡的評最高分,給不喜歡的評最低分;而有些用戶傾向於不出現極端評分。即所謂「分數貶值」( Grade Inflation )問題。這種問題的存在可能讓基於距離的評分產生偏差。皮爾遜相關系數可以緩解這種問題。

原皮爾遜相關系數公式在實際運用的時候會出現多次迭代的問題,影響計算效率,這里給出了近似公式:

皮爾遜相關系數的用戶判斷依據不是單純的用戶距離,而是用戶的評分一致性:取值在[-1, 1]之間,越接近1則表示兩用戶的評分一致性越好;反之則反。
python實現:

基於用戶推薦的過程中,另一個存在的問題就是由於大部分人的喜愛物品集合的交集過少,存在大量計算值為0的feature的情況。即所謂 稀疏性 問題。一個較容易理解的例子是對書本內容的挖掘。餘弦相似度會忽略這種0-0匹配。
餘弦相似度:

python實現:

如此多的評估系數,如何進行抉擇呢?根據數據特徵:

另外值得考慮的一點是,目前為止的推薦都是基於單用戶的。即對一個用戶的推薦系統只是基於另一個用戶。這會存在一些問題。比如雖然雖然兩者相似度很高,但是另外一個人有一些怪癖,怪癖的推薦就是不合理的;又比如,在相似度極高的情況下,你不能確定統一賬戶下的操作是同一個人做出的或者說操作行為是為了用戶自身。比如用戶考慮購買某件商品作為禮物送給別人,這就是基於別人喜好的購買行為,這種推薦也是不合適的。
對這種問題的解決可以使用群體劃分的方法。原理與單用戶類似,但是用戶的匹配是k個。在這k位最優匹配的用戶之間,以相似度的大小為依據設定權重作為物品推薦的條件。此即協同過濾的k近鄰。

正如前面提到的基於用戶的推薦有復雜度、稀疏性的問題,而基於物品的過濾則可以緩解這些問題。所謂基於物品的過濾是指,我們事先找到最相似的物品,並結合用戶對物品的評級結果來生成推薦。前提是要對物品進行相似度匹配,找到一種演算法。

這里的調整是指為了減輕用戶評分體系的不一致情況(抵消分數貶值),從每個評級結果中減去該用戶所有物品的平均分的評級結果。

其中,U表示所有同時對i, j進行評級過的用戶的集合。 表示用戶u給物品i的評分減去用戶u對所有物品的評分的平均值。

在得到所有物品的餘弦相似度後,我們就可以通過該指數預測用戶對某件物品的偏好程度。方法就是所有相似物品的相似度乘以得分的總和。

其中p(u, i)指的是用戶u對物品i評分的預測值。N是用戶u的所有評級物品中每個和i得分相似的物品。這里的相似指的是矩陣中存在N和i的一個相似度得分。 是i和N之間的相似度得分。 是u給N的評級結果。公式較好運行的條件是 取值在(-1, 1)之間,這里就要使用歸一化概念。

另一種常用的基於物品過濾的演算法就是 slope one 演算法。它的大概原理是預測用戶u對產品j的評分時,預先計算包含所有物品的兩物品偏差表;根據u的已評價的所有物品評分與該物品和產品j的偏差( )之和並乘以所有對此兩類物品有過評分的用戶個數,一一加總,除以所有同時對產品i與u評價過的所有物品有過評分的用戶的人數,得到得分。公式如下:

其中, ; 是利用加權s1演算法給出的用戶u對物品j的預測值。 指的是對所有除j之外u打過分的物品。

python實現:

在前面兩節中,基於物品和基於用戶的過濾其前提都是用戶需要對已有的item進行評分。而實際上,如果一個新的item出現,由於缺乏別人的偏好,他永遠不會被推薦。這就是推薦系統中所謂的—— 冷啟動 問題。基於用戶評價的系統就會出現這種問題。
冷啟動 問題的解決方案之一就是 基於物品屬性的過濾 來進行推薦:對物品自身的屬性進行歸納總結,並以此進行物品推薦。基於物品屬性的過濾存在一個問題同樣是量綱的不統一。如果量綱不統一極端值將會對推薦系統造成大麻煩。解決方法也很簡單:歸一化。此章使用的是z-評分。
使用z得分也存在問題,就是極易受到離群值的影響。這里可以使用 改進的標准分數 來緩解這個問題:

什麼時候可以進行歸一化呢?

這里用曼哈頓距離舉例基於物品屬性的過濾:

在上一章最後一節對於用戶是否喜歡某件item的判別中,實際上包含了分類器的思想:分類器就是利用對象屬性判定對象屬於哪個組或類別的程序。這里簡單用另一個小項目來說明。

簡單來說就是根據運動員的某些指標來判斷這位運動員屬於什麼類別的運動員。

准確率有0.8。

⑷ https://.baidu.com/question/2270990967816553188.html

整理一下自己的理解。
對於一個users-procts-rating的評分數據集,ALS會建立一個user*proct的m*n的矩陣
其中,m為users的數量,n為procts的數量
但是在這個數據集中,並不是每個用戶都對每個產品進行過評分,所以這個矩陣往往是稀疏的,用戶i對產品j的評分往往是空的
ALS所做的事情就是將這個稀疏矩陣通過一定的規律填滿,這樣就可以從矩陣中得到任意一個user對任意一個proct的評分,ALS填充的評分項也稱為用戶i對產品j的預測得分
所以說,ALS演算法的核心就是通過什麼樣子的規律來填滿(預測)這個稀疏矩陣
它是這么做的:
假設m*n的評分矩陣R,可以被近似分解成U*(V)T
U為m*d的用戶特徵向量矩陣
V為n*d的產品特徵向量矩陣((V)T代表V的轉置,原諒我不會打轉置這個符號。。)
d為user/proct的特徵值的數量

關於d這個值的理解,大概可以是這樣的
對於每個產品,可以從d個角度進行評價,以電影為例,可以從主演,導演,特效,劇情4個角度來評價一部電影,那麼d就等於4
可以認為,每部電影在這4個角度上都有一個固定的基準評分值
例如《末日崩塌》這部電影是一個產品,它的特徵向量是由d個特徵值組成的
d=4,有4個特徵值,分別是主演,導演,特效,劇情
每個特徵值的基準評分值分別為(滿分為1.0):
主演:0.9(大光頭還是那麼霸氣)
導演:0.7
特效:0.8
劇情:0.6
矩陣V由n個proct*d個特徵值組成

對於矩陣U,假設對於任意的用戶A,該用戶對一部電影的綜合評分和電影的特徵值存在一定的線性關系,即電影的綜合評分=(a1*d1+a2*d2+a3*d3+a4*d4)
其中a1-4為用戶A的特徵值,d1-4為之前所說的電影的特徵值
參考:
協同過濾中的矩陣分解演算法研究

那麼對於之前ALS演算法的這個假設
m*n的評分矩陣R,可以被近似分解成U*(V)T
就是成立的,某個用戶對某個產品的評分可以通過矩陣U某行和矩陣V(轉置)的某列相乘得到

那麼現在的問題是,如何確定用戶和產品的特徵值?(之前僅僅是舉例子,實際中這兩個都是未知的變數)
採用的是交替的最小二乘法
在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)在上面的公式中,a表示評分數據集中用戶i對產品j的真實評分,另外一部分表示用戶i的特徵向量(轉置)*產品j的特徵向量(這里可以得到預測的i對j的評分)
用真實評分減去預測評分然後求平方,對下一個用戶,下一個產品進行相同的計算,將所有結果累加起來(其中,數據集構成的矩陣是存在大量的空打分,並沒有實際的評分,解決的方法是就只看對已知打分的項)
參考:
ALS 在 Spark MLlib 中的實現
但是這里之前問題還是存在,就是用戶和產品的特徵向量都是未知的,這個式子存在兩個未知變數

解決的辦法是交替的最小二乘法
首先對於上面的公式,以下面的形式顯示:
為了防止過度擬合,加上正則化參數為了防止過度擬合,加上正則化參數
首先用一個小於1的隨機數初始化V首先用一個小於1的隨機數初始化V
根據公式(4)求U
此時就可以得到初始的UV矩陣了,計算上面說過的差平方和
根據計算得到的U和公式(5),重新計算並覆蓋V,計算差平方和
反復進行以上兩步的計算,直到差平方和小於一個預設的數,或者迭代次數滿足要求則停止
取得最新的UV矩陣
則原本的稀疏矩陣R就可以用R=U(V)T來表示了
以上公式內容截圖來自:
基於矩陣分解的協同過濾演算法

總結一下:
ALS演算法的核心就是將稀疏評分矩陣分解為用戶特徵向量矩陣和產品特徵向量矩陣的乘積
交替使用最小二乘法逐步計算用戶/產品特徵向量,使得差平方和最小
通過用戶/產品特徵向量的矩陣來預測某個用戶對某個產品的評分

不知道是不是理解正確了
有幾個問題想請教一下~

⑸ 協同過濾演算法

用戶行為數據在網站上最簡單的存在形式就是日誌,比如用戶在電子商務網站中的網頁瀏覽、購買、點擊、評分和評論等活動。 用戶行為在個性化推薦系統中一般分兩種——顯性反饋行為(explicit feedback)和隱性反饋 行為(implicit feedback)。顯性反饋行為包括用戶明確表示對物品喜好的行為。網站中收集顯性反饋的主要方式就是評分和喜歡/不喜歡。隱性反饋行為指的是那些不能明確反應用戶喜好 的行為。最具代表性的隱性反饋行為就是頁面瀏覽行為。 按照反饋的明確性分,用戶行為數據可以分為顯性反饋和隱性反饋,但按照反饋的方向分, 又可以分為正反饋和負反饋。正反饋指用戶的行為傾向於指用戶喜歡該物品,而負反饋指用戶的 行為傾向於指用戶不喜歡該物品。在顯性反饋中,很容易區分一個用戶行為是正反饋還是負反饋, 而在隱性反饋行為中,就相對比較難以確定。

在利用用戶行為數據設計推薦演算法之前,研究人員首先需要對用戶行為數據進行分析,了解 數據中蘊含的一般規律,這樣才能對演算法的設計起到指導作用。

(1) 用戶活躍度和物品流行度

(2) 用戶活躍度和物品流行度的關系

一般認為,新用戶傾向於瀏覽熱門的物品,因為他 們對網站還不熟悉,只能點擊首頁的熱門物品,而老用戶會逐漸開始瀏覽冷門的物品。如果用橫坐標表示用戶活躍度,縱坐標表示具有某個活躍度的所有用戶評過分的物品的平均流行度。圖中曲線呈明顯下 降的趨勢,這表明用戶越活躍,越傾向於瀏覽冷門的物品。

僅僅基於用戶行為數據設計的推薦演算法一般稱為協同過濾演算法。學術界對協同過濾演算法進行了深入研究,提出了很多方法,比如基於鄰域的方法(neighborhood-based)、隱語義模型 (latent factor model)、基於圖的隨機遊走演算法(random walk on graph)等。在這些方法中, 最著名的、在業界得到最廣泛應用的演算法是基於鄰域的方法,而基於鄰域的方法主要包含下面兩種演算法。

基於用戶的協同過濾演算法 :這種演算法給用戶推薦和他興趣相似的其他用戶喜歡的物品

基於物品的協同過濾演算法: 這種演算法給用戶推薦和他之前喜歡的物品相似的物品

基於鄰域的演算法是推薦系統中最基本的演算法,該演算法不僅在學術界得到了深入研究,而且在 業界得到了廣泛應用。基於鄰域的演算法分為兩大類,一類是基於用戶的協同過濾演算法,另一類是 基於物品的協同過濾演算法。現在我們所說的協同過濾,基本上就就是指基於用戶或者是基於物品的協同過濾演算法,因此,我們可以說基於鄰域的演算法即是我們常說的協同過濾演算法

(1) 基於用戶的協同過濾演算法(UserCF)

基於用戶的協同過濾演算法的基本思想是:在一個在線個性化推薦系統中,當一個用戶A需要個性化推薦 時,可以先找到和他有相似興趣的其他用戶,然後把那些用戶喜歡的、而用戶A沒有聽說過的物品推薦給A。

Ø 從上面的描述中可以看到,基於用戶的協同過濾演算法主要包括兩個步驟。 第一步:找到和目標用戶興趣相似的用戶集合。 第二步: 找到這個集合中的用戶喜歡的,且目標用戶沒有聽說過的物品推薦給目標用戶。

這里,步驟1的關鍵是計算兩個用戶的興趣相似度,協同過濾演算法主要利用行為的相似度計算興趣的相似度。給定用戶u和用戶v,令N(u)表示用戶u曾經有過正反饋的物品集合,令N(v) 為用戶v曾經有過正反饋的物品集合。那麼我們可以通過以下方法計算用戶的相似度:

基於餘弦相似度

(2) 基於物品的協同過濾演算法(itemCF)
與UserCF同理
(3) UserCF和itemCF的比

首先我們提出一個問題,為什麼新聞網站一般使用UserCF,而圖書、電商網站一般使用ItemCF呢? 首先回顧一下UserCF演算法和ItemCF演算法的推薦原理。UserCF給用戶推薦那些和他有共同興 趣愛好的用戶喜歡的物品,而ItemCF給用戶推薦那些和他之前喜歡的物品類似的物品。從這個算 法的原理可以看到,UserCF的推薦結果著重於反映和用戶興趣相似的小群體的熱點,而ItemCF 的推薦結果著重於維系用戶的歷史興趣。換句話說,UserCF的推薦更社會化,反映了用戶所在的小型興趣群體中物品的熱門程度,而ItemCF的推薦更加個性化,反映了用戶自己的興趣傳承。 在新聞網站中,用戶的興趣不是特別細化,絕大多數用戶都喜歡看熱門的新聞。個性化新聞推薦更加強調抓住 新聞熱點,熱門程度和時效性是個性化新聞推薦的重點,而個性化相對於這兩點略顯次要。因 此,UserCF可以給用戶推薦和他有相似愛好的一群其他用戶今天都在看的新聞,這樣在抓住熱 點和時效性的同時,保證了一定程度的個性化。同時,在新聞網站中,物品的更新速度遠遠快於新用戶的加入速度,而且 對於新用戶,完全可以給他推薦最熱門的新聞,因此UserCF顯然是利大於弊。

但是,在圖書、電子商務和電影網站,比如亞馬遜、豆瓣、Netflix中,ItemCF則能極大地發 揮優勢。首先,在這些網站中,用戶的興趣是比較固定和持久的。一個技術人員可能都是在購買 技術方面的書,而且他們對書的熱門程度並不是那麼敏感,事實上越是資深的技術人員,他們看 的書就越可能不熱門。此外,這些系統中的用戶大都不太需要流行度來輔助他們判斷一個物品的 好壞,而是可以通過自己熟悉領域的知識自己判斷物品的質量。因此,這些網站中個性化推薦的 任務是幫助用戶發現和他研究領域相關的物品。因此,ItemCF演算法成為了這些網站的首選演算法。 此外,這些網站的物品更新速度不會特別快,一天一次更新物品相似度矩陣對它們來說不會造成 太大的損失,是可以接受的。同時,從技術上考慮,UserCF需要維護一個用戶相似度的矩陣,而ItemCF需要維護一個物品 相似度矩陣。從存儲的角度說,如果用戶很多,那麼維護用戶興趣相似度矩陣需要很大的空間, 同理,如果物品很多,那麼維護物品相似度矩陣代價較大

下表是對二者的一個全面的表較:

⑹ 協同過濾,矩陣分解有感

    這個概念經常在機器學習的文章中看到,但由於接觸不久,所以一直都是一知半解,沒有好好了解過。

    首先從字面上理解,「協同」需要一個「集體「,「過濾」就應該是曬選的意思,那麼協同過濾總的來說就是通過「集體」來「篩選」,以評分推薦系統為例子,這里的「協同」我個人理解就是集合」眾多人的評價」,這里的「評價」,就是「對集體都接觸過的事物進行打分」,這樣大概就能通過一些共同的事物反應出用戶不同的」價值觀「,然後通過這樣的價值觀來」篩選「出價值觀高度相似的人,再相互推薦共同都喜愛的東西。那麼這樣的推薦就很有可能是大家都需要的。

    經過資料洗禮過後,得知cf現在的兩大方向,一種是以記憶為基礎(Memory-base),另一種是基於模型(Model-based Collaborative Filtering)。

    普及的比較多的前者,它基於關注的目標,又分為基於用戶的協同過濾和基於項目的協同過濾,上面舉的一個簡單的評分推薦系統的例子就可以說是基於用戶的協同過濾,它是通過用戶對共同物品的「主觀價值」來篩選相似用戶,再互補評分高的商品,從而達到推薦商品的目的;那麼基於項目的意思就是通過這個用戶集體對商品集的評價,在物品的角度上去尋找相似度高的物品,達到推薦商品的效果。雖然針對的目標不通,但以我個人理解,大體上都是依賴這個用戶集營造的「價值觀」,只不過區別在於,基於用戶的CF是「關心」各個用戶的「主觀價值」上的「區別」,而基於項目的CF則是要基於這整個用戶集對項目集的「普世價值觀」,來甄別出「物品」上的差異。不知道這么比喻恰不恰當哈,「普世」我這邊理解就是「大多數」,是一種整體趨勢的意思。價值觀比較「抽象」的話,再直接點這里的「價值觀」就相當於物理中的「參考系」。

    但是以上兩種方法在面對,不是每個用戶對大多數商品都做出過評價(數據稀疏)時就無能為力,所以基於這個問題就引導出了基於模型(Model-based )的CF,我在最近的論文中接觸到的就是一個「矩陣分解」的協同過濾,它能夠基於現有的數據得到一個模型,再用此模型進行推薦。那麼是如何做到的呢?接下來看看矩陣分解。

    假設我先在有一個關於用戶對音樂評分的矩陣如下圖:

    只有上述的數據是很難使用戶相互推薦音樂的,因為可以看出用戶本身聽過的歌就不夠多,那麼如何使數據更加「飽滿」呢?這時正是需要矩陣分解的時候,矩陣分解演算法的數學理論基礎是矩陣的行列變換。行列變換中又有以下規則,我們知道矩陣A進行行變換相當於A左乘一個矩陣,矩陣A進行列變換等價於矩陣A右乘一個矩陣,因此矩陣A可以表示為A=PEQ=PQ(E是標准陣)。

    形象的表示如下圖:

    矩陣分解的目的就是把一個稀疏的用戶評分矩陣分解成用戶因子矩陣和項目因子矩陣相乘的形式R=U(轉置)*I,我們的目的就是最後再讓兩個因子矩陣反乘回去得到飽滿的用戶評分矩陣。那麼這個用戶,項目因子是個什麼東西呢?我們接著上面的音樂評分的形式說,一首歌可能包含多種音樂風格,我們可以量化風格,體現各種風格在一首歌中的比重,那麼這里的「潛在因子」我們就可以當作「音樂風格」,K個因子就可以看作K種風格。譬如下圖:

    可以說,這些因子就是我們的模型中的重要參數,個人理解分解出來的這兩個因子矩陣就可以說是基於模型的CF中的,「模型」的了,其實我覺得可以類比線性模型中的參數,我們的回歸模型最終重要的不就是公式中的各項參數嗎,這兩個因子矩陣其實就是我們這個模型中的重要參數,參數知道了模型也就求出來了。如果不了解線性模型可以參考吳恩達大大的機器學習課程,裡面介紹的很詳細,不像我這邊一知半哈。

    那麼這些個值具體是怎麼得出來的呢?過程和求線性回歸也很像,接下來就是相關的簡單推倒,首先,我們假設,真實的用戶評分和我們預測評分的差遵循高斯分布

R用是評分矩陣   U是用戶因子矩陣,V是項目因子矩陣

接下來就是極大似然估計,使,在現有數據下概率最大化

    類比求線性模型,就能夠了解思想很相似,所以應該同樣是運用了似然估計的思想,要使值最大,式子兩邊同時取對數,可以看到,如果要使概率最大,那麼公式的第一項就要最小,是不是想到了什麼,沒錯接下來就可以看到最小二乘法的式子。

    線性模型我們遇到這個情況一般怎麼做,沒錯,就是梯度下降。首先求偏導數

最後就是梯度下降的矩陣因子更新公式:

    接下來迭代到自己設置的閾值收斂就能得到局部最優解了。

    下面是我根據上述矩陣分解的思想隨機的模擬實踐,可以自行感受一下準度,可能寫搓了點~

注釋:以上諸多圖片材料來自網上多篇博客文章

https://www.hu.com/question/26743347

http://blog.csdn.net/dream_angel_z/article/details/46288167

還有方便實用sklearn的中文API文檔

http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030193

⑺ 利用 SVD 實現協同過濾推薦演算法

奇異值分解(Singular Value Decomposition,以下簡稱SVD)
是在機器學習領域廣泛應用的演算法,它不光可以用於 降維演算法中的特徵分解 ,還可以用於 推薦系統 ,以及自然語言處理等領域。

優點: 簡化數據,去除雜訊,提高演算法的結果。
缺點: 數據的轉換可能難以理解。

應用領域: 推薦引擎(協同過濾、相似度計算)、圖像壓縮等。

SVD定義: 如果我們求出了矩陣A的n個特徵值λ1≤λ2≤...≤λn,以及這n個特徵值所對應的特徵向量{w1,w2,...wn},如果這n個特徵向量線性無關,那麼矩陣A就可以用下式的特徵分解表示:A=WΣW−1,其中W是這n個特徵向量所張成的n×n維矩陣,而Σ為這n個特徵值為主對角線的n×n維矩陣。一般我們會把W的這n個特徵向量標准化,即滿足||wi||2=1, 或者wiTwi=1,此時W的n個特徵向量為標准正交基,滿WTW=I,即WT=W−1, 也就是說W為酉矩陣。要進行特徵分解,矩陣A必須為方陣。那麼如果A不是方陣,則用到SVD。

矩陣A的SVD為:A=UΣVT,其中U是一個m×m的矩陣,Σ是一個m×n的矩陣,除了主對角線上的元素以外全為0,主對角線上的每個元素都稱為奇異值,V是一個n×n的矩陣。U和V都是酉矩陣,即滿足UTU=I,VTV=I。

對於奇異值,它跟我們特徵分解中的特徵值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上的比例。也就是說,我們也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。

因此SVD 也是一種強大的降維工具 ,可以利用 SVD 來逼近矩陣並從中獲得主要的特徵。通過保留矩陣的 80%~90% 的能量,就可以得到重用的特徵並去除雜訊。

推薦系統 是利用電子商務網站向客戶提供商品信息和建議,幫助用戶決定應該購買什麼產品,模擬銷售人員幫助客戶完成購買過程。
主要有以下幾種推薦演算法:
基於內容的推薦(用到自然語言處理), 協同過濾(主流) ,基於規則推薦(基於最多用戶點擊,最多用戶瀏覽等),混合推薦(類似集成演算法,投票決定),基於人口統計信息的推薦(根據用戶基本信息)

協同過濾推薦分為三種類型。 第一種是基於用戶(user-based)的協同過濾(需要在線找用戶和用戶之間的相似度關系),第二種是基於項目(item-based)的協同過濾(基於項目的協同過濾可以離線找物品和物品之間的相似度關系), 第三種是基於模型(model based)的協同過濾(用戶和物品,主流)。

一般在推薦系統中,數據往往是使用 用戶-物品 矩陣來表示的。 用戶對其接觸過的物品進行評分,評分表示了用戶對於物品的喜愛程度,分數越高,表示用戶越喜歡這個物品。而這個矩陣往往是稀疏的,空白項是用戶還未接觸到的物品,推薦系統的任務則是選擇其中的部分物品推薦給用戶。

對於這個 用戶-物品 矩陣,用已有的部分稀疏數據來預測那些空白的物品和數據之間的評分關系,找到最高評分的物品推薦給用戶。

具體基於模型的方法有:
用關聯演算法做協同過濾(Apriori演算法、FP Tree演算法)
用聚類演算法做協同過濾(針對基於用戶或者基於模型,Kmeans,DBSCAN)
用分類演算法做協同過濾(設定評分閾值,高於推薦,低於不推薦,邏輯回歸和樸素貝葉斯,解釋性很強)
用回歸演算法做協同過濾(Ridge回歸,回歸樹)
用矩陣分解做協同過濾(由於傳統的奇異值分解SVD要求矩陣不能有缺失數據,必須是稠密的,而用戶物品評分矩陣是一個典型的稀疏矩陣,主要是SVD的一些變種,比如FunkSVD,BiasSVD和SVD++。這些演算法和傳統SVD的最大區別是不再要求將矩陣分解為UΣVT的形式,而變是兩個低秩矩陣PTQ的乘積形式。)
用神經網路做協同過濾(限制玻爾茲曼機RBM)

在 Python 的 numpy 中,linalg已經實現了SVD

⑻ 協同過濾

協同過濾(Collaborative Filtering,CF)——經典/老牌
只用戶行為數據得到。對於 個用戶, 個物品,則有共現矩陣 :
對於有正負反饋的情況,如「贊」是1和「踩」是-1,無操作是0:

對於只有顯示反饋,如點擊是1,無操作是0:

演算法步驟:
1)得到共現矩陣 ;
2)計算 任意兩行 用戶相似度,得到用戶相似度矩陣 ;
3)針對某個用戶 選出與其最相似的 個用戶, 是超參數;——召回階段
4)基於這 個用戶,計算 對每個物品的得分;
5)按照用戶 的物品得分進行排序,過濾已推薦的物品,推薦剩下得分最高的 個。——排序階段

第2步中,怎麼計算用戶相似度?——使用共現矩陣的行
以餘弦相似度為標准,計算 和 之間的相似度:


第4步中,怎麼每個用戶對每個物品的得分?
假如和用戶 最相似的2個為 和 :


對物品 的評分為1,用戶 對物品 的評分也為1,那麼用戶 對 的評分為:

也就是說:利用用戶相似度對用戶評分進行加權平均:

其中, 為用戶 和用戶 之間的相似度, 為用戶 和物品 之間的相似度。

UserCF的缺點
1、現實中用戶數遠遠大於物品數,所以維護用戶相似度矩陣代價很大;
2、共現矩陣是很稀疏的,那麼計算計算用戶相似度的准確度很低。

演算法步驟:
1)得到共現矩陣 ;
2)計算 任意兩列 物品相似度,得到物品相似度矩陣 ;
3)對於有正負反饋的,獲得用戶 正反饋的物品;
4)找出用戶 正反饋的物品最相似的 個物品,組成相似物品集合;——召回階段
5)利用相似度分值對相似物品集合進行排序,生產推薦列表。——排序階段
最簡單情況下一個物品(用戶未接觸的)只出現在另一個物品(用戶已反饋的)的最相似集合中,那麼每個用戶對每個物品的得分就是相似度。如果一個物品和多個物品最相似怎麼辦?
如用戶正反饋的是 和 ,對於物品 其最相似的是 ,相似度為0.7,對於物品 其最相似的也是 ,相似度為0.6,那麼 相似度為:

也就是說:如果一個物品出現在多個物品的 個最相似的物品集合中,那麼該物品的相似度為多個相似度乘以對應評分的累加。

其中, 是物品p與物品h的相似度, 是用戶u對物品p的評分。

第2步中,怎麼計算物品相似度?——使用共現矩陣的列
以餘弦相似度為標准,計算 和 之間的相似度:


餘弦相似度
皮爾遜相關系數
基於皮爾遜相關系數的改進

UserCF適用於用戶興趣比較分散變換較快的場景,如新聞推薦。
IteamCF適用於用戶情趣不叫穩定的場景,如電商推薦。

優點:直觀,可解釋性強。
缺點:

⑼ 推薦系統(一):基於物品的協同過濾演算法

協同過濾(collaborative filtering)演算法是最經典、最常用的推薦演算法。其基本思想是收集用戶偏好,找到相似的用戶或物品,然後計算並推薦。
基於物品的協同過濾演算法的核心思想就是:給用戶推薦那些和他們之前喜歡的物品相似的物品。主要可分為兩步:
(1) 計算物品之間的相似度,建立相似度矩陣。
(2) 根據物品的相似度和用戶的歷史行為給用戶生成推薦列表。

相似度的定義有多種方式,下面簡要介紹其中幾種:

其中,分母 是喜歡物品 的用戶數,而分子 是同時喜歡物品 和物品 的用戶數。因此,上述公式可以理解為喜歡物品 的用戶中有多少比例的用戶也喜歡物品 。
上述公式存在一個問題。如果物品 很熱門, 就會很大,接近1。因此,該公式會造成任何物品都會和熱門的物品有很大的相似度,為了避免推薦出熱門的物品,可以用下面的公式:

這個公式懲罰了物品 的權重,因此減輕了熱門物品會和很多物品相似的可能性。
另外為減小活躍用戶對結果的影響,考慮IUF(nverse User Frequence) ,即用戶活躍度對數的倒數的參數,認為活躍用戶對物品相似度的貢獻應該小於不活躍的用戶。

為便於計算,還需要進一步將相似度矩陣歸一化 。

其中 表示用戶 對物品 的評分。 在區間 內,越接近1表示相似度越高。

表示空間中的兩個點,則其歐幾里得距離為:

當 時,即為平面上兩個點的距離,當表示相似度時,可採用下式轉換:

距離越小,相似度越大。

一般表示兩個定距變數間聯系的緊密程度,取值范圍為[-1,1]

其中 是 和 的樣品標准差

將用戶行為數據按照均勻分布隨機劃分為M份,挑選一份作為測試集,將剩下的M-1份作為訓練集。為防止評測指標不是過擬合的結果,共進行M次實驗,每次都使用不同的測試集。然後將M次實驗測出的評測指標的平均值作為最終的評測指標。

對用戶u推薦N個物品(記為 ),令用戶u在測試集上喜歡的物品集合為 ,召回率描述有多少比例的用戶-物品評分記錄包含在最終的推薦列表中。

准確率描述最終的推薦列表中有多少比例是發生過的用戶-物品評分記錄。

覆蓋率反映了推薦演算法發掘長尾的能力,覆蓋率越高,說明推薦演算法越能夠將長尾中的物品推薦給用戶。分子部分表示實驗中所有被推薦給用戶的物品數目(集合去重),分母表示數據集中所有物品的數目。

採用GroupLens提供的MovieLens數據集, http://www.grouplens.org/node/73 。本章使用中等大小的數據集,包含6000多用戶對4000多部電影的100萬條評分。該數據集是一個評分數據集,用戶可以給電影評1-5分5個不同的等級。本文著重研究隱反饋數據集中TopN推薦問題,因此忽略了數據集中的評分記錄。

該部分定義了所需要的主要變數,集合採用字典形式的數據結構。

讀取原始CSV文件,並劃分訓練集和測試集,訓練集佔比87.5%,同時建立訓練集和測試集的用戶字典,記錄每個用戶對電影評分的字典。

第一步循環讀取每個用戶及其看過的電影,並統計每部電影被看過的次數,以及電影總數;第二步計算矩陣C,C[i][j]表示同時喜歡電影i和j的用戶數,並考慮對活躍用戶的懲罰;第三步根據式\ref{similarity}計算電影間的相似性;第四步進行歸一化處理。

針對目標用戶U,找到K部相似的電影,並推薦其N部電影,如果用戶已經看過該電影則不推薦。

產生推薦並通過准確率、召回率和覆蓋率進行評估。

結果如下所示,由於數據量較大,相似度矩陣為 維,計算速度較慢,耐心等待即可。

[1]. https://blog.csdn.net/m0_37917271/article/details/82656158
[2]. 推薦系統與深度學習. 黃昕等. 清華大學出版社. 2019.
[3]. 推薦系統演算法實踐. 黃美靈. 電子工業出版社. 2019.
[4]. 推薦系統演算法. 項亮. 人民郵電出版社. 2012.
[5]. 美團機器學習實踐. 美團演算法團隊. 人民郵電出版社. 2018.

⑽ 矩陣分解演算法

矩陣分解演算法主要用於解決協同過濾演算法泛化能力弱的問題。

在現實中人和商品可以進行分類,比如將人分為偏好刺激的、偏好自然的,將電影分為恐怖的、溫馨的。當我們以這樣信息對人和物進行標定後就可以根據他們直接的距離來判斷他們的相似程度。

一般協同過濾的思路通過物品找到相似的人,在給用戶1推薦和他相似的用戶喜歡的物品。

對用戶和物品在映射到低維度下計算他們之間的距離。

原有的 大小的共現矩陣 ,我們的目標是將它分解為 , 表示降維後的用戶矩陣, 表示降維後的物品矩陣, 表示降溫的程度一般 是遠小於 。

如何進行矩陣分解?接下來介紹幾種策略

在推薦模型中出現矩陣分解思路時自然想到了SVD(奇異值分解),SVD可以將一個矩陣 分解為 的形式,D中主對角線上是從到到小排序的奇異值,我們選擇前幾個奇異值和對應U和V的向量這樣實現了降維。

降維後的 可以作為用戶矩陣,降維後的 可以作為物品矩陣。接著使用 , 公式對所有的用戶產品組合進行評分,這樣我們就把原共現矩陣中用戶沒有評分的物品也打上分了,利用這些評分就可以完成推薦。

問題就這樣完美解決了?並不是。

矩陣 要進行SVD分解它就不能存在空的數據,而我們待分解的矩陣由於用戶操作的低頻特點,肯定會有空的位置出現,並且如果已經有了一個填滿數據的共現矩陣,那就不用進行分解直接用就可以了。針對空數據可以採用填0、填平均值等方式暴力補全數據,但是這樣的操作會影響准確度而且對越稀疏的矩陣影響越大,同時存放一個暴力填滿的矩陣要求更多的存儲空間,還有SVD的時間復雜度 也很可觀。

這個模型感覺和SVD關系不大了,他的目標是得到矩陣 和 ,這兩個矩陣可以很好的反應已知的用戶數據,根據以上目標構造待優化的目標函數

這里 表示用戶評分樣本集合。為了避免過擬合引入正則項後目標函數變為

接著利用梯度下降求解 和 。

Funk-SVD模式解決了SVD模型中空數據需要保留填寫、SVD分解耗時、佔用空間多的問題。同時考慮一些偏置。

用戶偏置 :一些用戶喜歡打高分、一些用戶喜歡打低分

物品偏置 :一些電影普遍得分高

整體偏置 :數據整體的平均得分

這樣可以消除偏置,讓預測更合理。

該模型依然存在利用信息有限的缺點。

深度學習推薦系統 王喆

推薦系統之矩陣分解家族

推薦系統實踐 項亮

閱讀全文

與協同過濾共現矩陣相關的資料

熱點內容
鄭州市污水管網 瀏覽:376
藍瑟空調濾芯在什麼位置 瀏覽:666
什麼時候用凈化器 瀏覽:622
飲水機桶裡面怎麼清洗 瀏覽:868
框架結構伸縮縫防水處理 瀏覽:259
博越中央空氣凈化器濾芯怎麼換 瀏覽:170
達芬奇顏色回批用什麼格式 瀏覽:742
最好的水處理方法 瀏覽:288
離子交換法什麼意思 瀏覽:968
清洗柴油濾芯怎麼換 瀏覽:220
電熱水器加入除垢劑 瀏覽:864
儲水式電熱水器免拆水垢工具除垢劑 瀏覽:164
凈水器加盟商哪個好 瀏覽:896
雙氧水加鹼除垢功效會嬌弱嗎 瀏覽:957
飲水機膽壞了有什麼症狀 瀏覽:592
沈陽什麼地方賣污水泵 瀏覽:898
怎麼在家裡提取蒸餾水 瀏覽:901
處理鹼性廢水加入什麼 瀏覽:809
大隻屈臣氏蒸餾水 瀏覽:18
市場污水怎麼處理 瀏覽:140