㈠ 協同過濾演算法
用戶行為數據在網站上最簡單的存在形式就是日誌,比如用戶在電子商務網站中的網頁瀏覽、購買、點擊、評分和評論等活動。 用戶行為在個性化推薦系統中一般分兩種——顯性反饋行為(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需要維護一個物品 相似度矩陣。從存儲的角度說,如果用戶很多,那麼維護用戶興趣相似度矩陣需要很大的空間, 同理,如果物品很多,那麼維護物品相似度矩陣代價較大
下表是對二者的一個全面的表較:
㈡ 基於協同過濾的推薦演算法
協同過濾推薦演算法是最經典的推薦演算法,它的演算法思想為 物以類聚,人以群分 ,基本的協同過濾演算法基於以下的假設:
實現協同過濾的步驟:
1). 找到相似的Top-N個人或者物品 :計算兩兩的相似度並進行排序
2). 根據相似的人或物品產生推薦結果 :利用Top-N生成初始推薦結果,然後過濾掉用戶已經有過記錄或者明確表示不喜歡的物品
那麼,如何計算相似度呢?
根據數據類型的不同,相似度的計算方式也不同,數據類型有:
一般的,相似度計算有 傑卡德相似度、餘弦相似度、皮爾遜相關系數
在協同過濾推薦演算法中,我們更多的是利用用戶對物品的評分數據集,預測用戶對沒有評分過的物品的評分結果。
用戶-物品的評分矩陣,根據評分矩陣的稀疏程度會有不同的解決方案。
目的:預測用戶1對於物品E的評分
步驟分析:
實現過程
用戶之間的兩兩相似度:
物品之間的兩兩相似度:
㈢ 利用 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
㈣ 推薦演算法之模型協同過濾(1)-關聯規則
關聯規則是數據挖掘中的典型問題之一,又被稱為購物籃分析,這是因為傳統的關聯規則案例大多發生在超市中,例如所謂的啤酒與尿布傳說。事實上,「購物籃」這個詞也揭示了關聯規則挖掘的一個重要特點:以交易記錄為研究對象,每一個購物籃(transaction)就是一條記錄。關聯規則希望挖掘的規則就是:哪些商品會經常在同一個購物籃中出現,其中有沒有因果關系。為了描述這種「經常性」及「因果關系」,分析者定義了幾個指標,基於這些指標來篩選關聯規則,從而得到那些不平凡的規律。
(1)計算支持度
支持度計數:一個項集出現在幾個事務當中,它的支持度計數就是幾。例如{Diaper, Beer}出現在事務 002、003和004中,所以它的支持度計數是3
支持度:支持度計數除於總的事務數。例如上例中總的事務數為4,{Diaper, Beer}的支持度計數為3,所以它的支持度是3÷4=75%,說明有75%的人同時買了Diaper和Beer。
(2)計算置信度
置信度:對於規則{Diaper}→{Beer},{Diaper, Beer}的支持度計數除於{Diaper}的支持度計數,為這個規則的置信度。例如規則{Diaper}→{Beer}的置信度為3÷3=100%。說明買了Diaper的人100%也買了Beer。
一般地,關聯規則被劃分為動態推薦,而協同過濾則更多地被視為靜態推薦。
所謂動態推薦,就是推薦的基礎是且只是當前一次(最近一次)的購買或者點擊。譬如用戶在網站上看了一個啤酒,系統就找到與這個啤酒相關的關聯規則,然後根據這個規則向用戶進行推薦。而靜態推薦則是在對用戶進行了一定分析的基礎上,建立了這個用戶在一定時期內的偏好排序,然後在這段時期內持續地按照這個排序來進行推薦。由此可見,關聯規則與協同過濾的策略思路是完全不同的類型。
事實上,即便在當下很多能夠拿到用戶ID的場景,使用動態的關聯規則推薦仍然是值得考慮的一種方法(尤其是我們經常把很多推薦方法的結果綜合起來做一個混合的推薦),因為這種方法的邏輯思路跟協同過濾有著本質的不同,問題似乎僅僅在於:個人的偏好到底有多穩定,推薦到底是要迎合用戶的長期偏好還是用戶的當下需求。
挖掘關聯規則主要有Apriori演算法和FP-Growth演算法。後者解決了前者由於頻繁的掃描數據集造成的效率低下缺點。以下按照Apriori演算法來講解。
step 1: 掃描數據集生成滿足最小支持度的頻繁項集。
step 2: 計算規則的置信度,返回滿足最小置信度的規則。
如下所示,當用戶購買1商品時推薦2、3商品
㈤ 利用協同過濾演算法為用戶推薦商品的方法有哪些
協同過濾(Collaborative Filtering)的基本復概念就是制把這種推薦方式變成自動化的流程
協同過濾主要是以屬性或興趣相近的用戶經驗與建議作為提供個性化推薦的基礎。透過協同過濾,有助於搜集具有類似偏好或屬性的用戶,並將其意見提供給同一集群中的用戶作為參考,以滿足人們通常在決策之前參考他人意見的心態。
本人認為,協同過濾技術應包括如下幾方面:(1)一種比對和搜集每個用戶興趣偏好的過程;(2)它需要許多用戶的信息去預測個人的興趣偏好;(3)通過對用戶之間興趣偏好相關程度的統計去發展建議那些有相同興趣偏好的用戶。
㈥ 個性化推薦演算法——協同過濾
有三種:協同過濾
用戶歷史行為
物品相似矩陣
㈦ 推薦演算法的基於協同過濾的推薦
基於協同過濾的推薦演算法理論上可以推薦世界上的任何一種東西。圖片、音樂、樣樣可以。 協同過濾演算法主要是通過對未評分項進行評分 預測來實現的。不同的協同過濾之間也有很大的不同。
基於用戶的協同過濾演算法: 基於一個這樣的假設「跟你喜好相似的人喜歡的東西你也很有可能喜歡。」所以基於用戶的協同過濾主要的任務就是找出用戶的最近鄰居,從而根據最近鄰 居的喜好做出未知項的評分預測。這種演算法主要分為3個步驟:
一,用戶評分。可以分為顯性評分和隱形評分兩種。顯性評分就是直接給項目評分(例如給網路里的用戶評分),隱形評分就是通過評價或是購買的行為給項目評分 (例如在有啊購買了什麼東西)。
二,尋找最近鄰居。這一步就是尋找與你距離最近的用戶,測算距離一般採用以下三種演算法:1.皮爾森相關系數。2.餘弦相似性。3調整餘弦相似性。調整餘弦 相似性似乎效果會好一些。
三,推薦。產生了最近鄰居集合後,就根據這個集合對未知項進行評分預測。把評分最高的N個項推薦給用戶。 這種演算法存在性能上的瓶頸,當用戶數越來越多的時候,尋找最近鄰居的復雜度也會大幅度的增長。
因而這種演算法無法滿足及時推薦的要求。基於項的協同過濾解決了這個問題。 基於項的協同過濾演算法 根基於用戶的演算法相似,只不過第二步改為計算項之間的相似度。由於項之間的相似度比較穩定可以在線下進行,所以解決了基於用戶的協同過濾演算法存在的性能瓶頸。
㈧ 基於用戶協同過濾(User-CF)的推薦演算法
1. 數學必備知識(向量)
2. 構建矩陣模型
3. User-CF的思想和計算
在一個個性化推薦系統中,當一個用戶A需要個性化推薦時,可以先找和他有相似興趣的其他用戶,然後把那些用戶喜歡的、而用戶A沒有聽說過的物品推薦給A。這種方法成為基於用戶的協同過濾演算法(User-CF)
根據問題域中構建出來的用戶-行為評分矩陣(圖1-1),我們可以構建出用戶的向量.首先,把每一個用戶用一個向量表示,每個向量里有6個數字,分別代表該用戶對6本書喜愛程度的評分.0代表用戶沒看過這本書.圖示:
接下來,計算倆個用戶的相似性,這里使用的指標叫作餘弦相似度,計算公式如下:
其中,分子部分a·b表示兩個向量的點積,計算方法就是兩個向量對應元素先相乘再求和,比如:
用戶a=[4 3 0 0 5 0]和用戶b=[5 0 4 0 4 0]
a·b=4x5+3x0+0x4+0x0+5x4+0x0=40
分母部分的 代表向量a的模長, 就是a,b兩個向量模長的乘積.向量模長的計算方法就是把向量
中的每個元素平方後再求和最後再開根號.
於是,第一個用戶和第二個用戶的相似度就可以進行如下計算:
餘弦相似度的值在[0,1]閉區間內,值越大說明越相似,值越小說明越不相似.根據上面的計算公式,分別計算小白和其他5個同事的相似度,然後根據從大到小的順序排列.可以看到小白和前倆個同事相似度高而和最後一個同事完全不相似.
比如,和小白最相似的兩個同事的閱讀列表編號有1,3,4,5共4本書.其中1,5這兩本書小白已經看過,3,4這兩本書哪本可能更適合小白的口味呢?
可以計算這兩個同事對這兩本書的加權評分並作為小白的可能評分,權重就是他們之間的相似度,具體計算如
下圖.通過計算可以看出編號為3的書可能更適合小白的口味.
計算步驟:
1. 先確定第一個同事擁有的閱讀列表的圖書編號為1,3,5
2. 再確定第二個同事擁有的閱讀列表的圖書編號為1,3,4,5
3. 小白自己已經擁有的閱讀的圖書列表是1,2,5[這也是打叉的意義,自己已經有的,不需要再推薦給自己了]
4. 最後剩餘的只有編號為3和編號為4的兩本書了
5. 計算公式說明,0.75和0.63代表權重,也就是相似值.4,3,5代表的是該用戶對這本書的評分.
1. 性能:適用於用戶較少的場合,如果用戶過多,計算用戶相似度矩陣的代價較大
2. 領域:實效性要求高,用戶個性化興趣要求不高
3. 實時性:用戶有新行為,不一定需要推薦結果立即變化
4. 冷啟動:在新用戶對少的物品產生行為後,不能立即對他進行個性化推薦,因為用戶相似度是離線計算的
新物品上線後一段時間,一旦有用戶對物品產生行為,就可以將新物品推薦給其他用戶