天天看點

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

推薦系統之協同過濾概述

http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/

這篇文章講得可真夠細的

推薦系統之協同過濾概述

2011年5月10日 15:03:19 由 vanjor 發表 [1,090 次閱讀]回複 »

協同過濾(Collaborative Filtering)是現今推薦系統中應

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

用最為成熟的一個推薦算法系類,它利用興趣相投、擁有共同經驗之群體的喜好來推薦使用者感興趣的資訊,個人透過合作的機制給予資訊相當程度的回應(如評分)并記錄下來以達到過濾的目的進而幫助别人篩選資訊(參考wiki,文字有點生硬,不過卻很好的描述了協同過濾的一個互動性:使用者參與使用者獲益)。

邊整理邊寫了整整一天o(╯□╰)o

一、背景

1.1 基本思想

簡單來說:

  • 和你興趣合得來的朋友喜歡的,你也很有可能喜歡;
  • 喜歡一件東西 A,而另一件東西 B 與這件十分相似,就很有可能喜歡 B;
  • 大家都比較滿意的,人人都追着搶的,我也就很有可能喜歡。

三者均反映在協同過濾的評級(rating)或者群體過濾(social filtering)這種行為特性上。

1.2 相關研究組織

協同過濾上比較經典著名的組織商業有:

  • Tapestry(1992):電子郵件分類過濾,解決Xerox公司在Palo Alto的研究中心資訊過載問題。
  • GroupLens(1994):推薦系統,線上社群,移動及普适技術,數字圖書館,和地理資訊系統,見大名鼎鼎的MovieLens電影評分推薦。
  • Netflix:研究影視視訊線上推薦 。
  • Amazon:亞馬孫網絡書城,為亞馬遜每年貢獻二三十個百分點的創收。

1.3 優缺點

優點:主要從使用者角度來看:

  • 能夠過濾機器難以自動内容分析的資訊,如藝術品,音樂等。也就是基于使用者辨別等,可以自動歸類;
  • 共用其他人的經驗,避免了内容分析的不完全或不精确,并且能夠基于一些複雜的,難以表述的概念(如資訊品質、個人品味)進行過濾,直接後天間接性繼承前輩經驗;
  • 有推薦新資訊的能力。可以發現内容上完全不相似的資訊,使用者對推薦資訊的内容事先是預料不到的。可以發現使用者潛在的但自己尚未發現的興趣偏好。(基于相似使用者推薦很好的能做到)
  • 推薦個性化、自動化程度高。能夠有效的利用其他相似使用者的回饋資訊。加快個性化學習的速度。

缺點:主要從設計與實作的角度

  • 新使用者問題(New User Problem): 系統開始時推薦品質較差 ;
  • 新項目問題(New Item Problem) :品質取決于曆史資料集 ;
  • 稀疏性問題(Sparsity):系統曆史資料過少,難以進行精确的模式查找比對推薦 ;
  • 系統延伸性問題(Scalability):新加User或者Item時,系統需要增加計算負荷量大。

1.4 對于目前推薦系統的問題的一些嘗試解決

本小節參考《Toward the next generation of recommender systems: A survey of the state-of-the-art and possible extensions》的2.2節翻譯。

新使用者問題

為了使推薦系統更加準确,系統必須從使用者的評分中學習使用者的偏好,有許多方法嘗試這方面研究,它們大多數使用混合推薦模型,包含了基于内容以及協同過濾推薦方法。另外的一種方法是挖掘一些條目提供給新使用者來進行評級,以便快速學習使用者的偏好。這些挖掘條目的技術是基于項目的流行度,項目的熵,使用者個性化,以及以上技術的糅合。

新項目問題

新的項目會經常添加到推薦系統中,協同過濾基本上是通過使用者的偏好進行推薦,這樣,直到新的項目被足夠數量的使用者進行評級,推薦系統才有可能推薦它,這個問題同樣是通過混合推薦方法來解決。

資料稀疏性

在許多推薦系統中,已經獲得到的評級資料相比整個待預測的項隻是很小的一部分,那麼從一個很小的樣例資料集中高效的預測評分是很重要的。同樣推薦系統的成功在于擁有足夠數量的使用者,列于,在電影推薦系統中,有很多電影隻被小部分使用者評級,而且這些電影會很少被推薦,即使那小部分使用者給予很高評級。同樣,對于那些有着不同品味的小衆群體,找不到相同特定同口味的使用者,也導緻較差的推薦結果了。

一個克服資料稀疏性問題的方法,是通過使用使用者資料資訊來計算使用者相似度。也就是,兩個使用者會被認為相似不隻單在相同的電影評級類似,而且也有可能屬于同一個人口統計區塊(demographic),比如,使用者的性别,年齡,居住地,教育情況,工作資訊。這種基于傳統協同過濾的擴充方法稱為demographic filtering。詳見M. Pazzani, 《A Framework for Collaborative, Content-Based, and Demographic Filtering, Artificial Intelligence Rev》

另外的一個嘗試在于挖掘被推薦出的使用者之間的相似性,在客戶的曆史交易和回報資料中,通過關聯檢索架構,以及相關傳播擴散算法來發現客戶間的可傳遞性關聯。

另外的一個途徑解決思路是,是通過一種降維技術( dimensionality reduction ),奇異值分解(SVD:Singular Value Decomposition ),來降低稀疏矩陣的次元。SVD是目前一個已知的矩陣分解技術,來為原始矩陣求的最好的低維近似。詳見B. Sarwar, 的《Application of Dimensionality Reduction in Recommender Systems—A Case Study》

二、分類概述

2.1 推薦系統概況

協同過濾作為推薦系統中的一個主流方法途徑,在推薦系統中所處地位是怎麼樣的呢,下面主要對推薦系統的方法類别進行介紹,從兩種不同的角度上,推薦系統中方法技術分類主要有以下兩種分類:

從研究對象方法上的一種分類

首先參考Adomavicius, G的論文《Toward the next generation of recommender systems: A survey of the state-of-the-art and possible extensions》

推薦系統中的總體方法有:

  • 基于内容的推薦(Content-based recommendations):系統會基于使用者上次喜歡的一個項目推薦相似的項目;
  • 協同過濾推薦(Collaborative recommendations):基于尋找相同評為與偏好的人群進行推薦;
  • 混合推薦(Hybrid approaches):融合基于内容以及協同過濾推薦方法。

并且論文中總結的現狀技術分類概述如下圖:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

從應用算法架構上分類

參考Carleton College, Northfield, MN.官方網站上:

  • 啟發式推薦算法(Memory-based algorithms):是系統過濾思想中的一種算法,每次推薦都需要調用這整個評級資料庫的内容,即對于一個使用者,計算與其他所有其他使用者的相似度,對于使用者沒有遇到的新項目,将會利用相似度權重及其他使用者的評分權重預測目前使用者對于這個新項目的潛在評分。但這種每次計算量過大
  • 基于模型推薦算法(Model-based algorithms):從評級資料集中建立一個模型,也就是從資料庫中抽取一個模型資料,然後每次推薦都是基于模型資料進行計算并推薦,這樣不用每次都調用整個資料庫,提高了速度與系統伸縮性。大緻包括:
    • Item-based collaborative filtering
    • Personality Diagnosis
    • SVD
  • 關聯規則算法(Association Rules):關聯規則嘗試發現不同項目之間的因果關系,一個關鍵規則本質上是一種(A1, A2, A3, … =>B1, B2, B3,…) 的形式,嘗試展示一個序列決定另外的一個序列。主要由兩部分組成:一個是關聯決策,一個是對應的置信度。
    • 關聯決策:即如果A => B, C, 那麼如果Item A出現在某人的曆史記錄裡面,那麼可以推斷B和C也很可能出現在那裡。
    • 置信度:表明對應的關聯決策有多麼可靠,範圍為[0, 1]的一個區間,如果置為1,那麼說明上述決策總能成立,如果為0,表明這個決策從來不會正确。

2.2 協同過濾基本分類

協同過濾實際上與推薦系統中的其他方法是交織疊加的,沒有一個明确的界限,推薦系統的方法嘗試都有結合協同過濾的思想因素去實作,參考wiki百科中協同過濾大體可以分為三類:

  • 基于使用者協同過濾(User – based):基于計算相似使用者用以推薦
  • 基于項目協同過濾(Item – based):基于計算相似項目用以推薦
  • 基于模型協同過濾(Model- based):基于原始資料中抽取出模型,基于模型計算并用以推薦

三、協同過濾三大分類

3.1 基于使用者協同過濾(User-based)

用相似統計的方法得到具有相似愛好或者興趣的相鄰使用者,最早是在1994年由來自美國Minnesota大學Paul Resnick等人發表的《GroupLens: An Open Architecture for Collaborative Filtering of Netnews》一文中提出的。

方法基本步驟

1. 收集使用者資訊

收集可以代表使用者興趣的資訊。概括主要分為兩類:

  • 主動評分(顯式評分):基于使用者的直接打分資料,如評分,喜愛等級,like/dislike
  • 被動評分(隐式評分):是根據使用者的行為模式由系統代替使用者完成評價,不需要使用者直接打分或輸入評價資料,如電子商務中的購買記錄,視訊網站使用者觀看記錄、收藏記錄,甚至是評論文本觀點意見挖掘等進行廣泛深度的資料挖掘。

2. 最近鄰搜尋(Nearest neighbor search, NNS)

以使用者為基礎(User-based)的協同過濾的出發點是與使用者興趣愛好相同的另一組使用者,就是計算兩個使用者的相似度。

例如:尋找n個和A有相似興趣使用者,把他們對M的評分作為A對M的評分預測。一般會根據資料的不同選擇不同的算法。

目前較多使用的相似度算法有:

  • 皮爾森相關系數:Person Correlation Coefficient
  • 餘弦相似度:Cosine-based Similarity
  • 矯正餘弦相似度:Adjusted Cosine Similarity

3. 産生推薦結果

有了最近鄰集合,就可以對目标使用者的興趣進行預測,産生推薦結果。

依據推薦目的不同形式的推薦,較常見的推薦結果有Top-N 推薦和關聯推薦。

  • Top-N 推薦:是針對個體使用者産生,對每個人産生不一樣的結果,例如:透過對A使用者的最近鄰使用者進行統計,選擇出現頻率高且在A使用者的評分項目中不存在的,作為推薦結果。
  • 關聯推薦:對最近鄰使用者的記錄進行關聯規則(association rules)挖掘。

優缺點

  • 優點:在資料集完善,内容豐富下,準确率較高,而且能夠避開項目内容上的挖掘進行準确推薦,對夠對項目關聯性,使用者偏好進行隐式透明的挖掘。
  • 缺點:随着使用者數量的增多,計算的時間就會變長,新使用者問題,以及資料稀疏性問題是導緻效率與伸縮性上均不足

3.2 基于項目協同過濾(Item-based)

鑒于基于使用者的協同推薦算法随着使用者數量的增多,計算的時間就會變長,最早是在2001年由Sarwar提出了基于項目的協同過濾推薦算法《Item-based Collaborative Filtering Algorithms》中所提出的。

基于項目協同過濾在于透過計算項目之間的相似性來代替使用者之間的相似性。

所建立的一個基本的假設:”能夠引起使用者興趣的項目,必定與其之前評分高的項目相似”,通俗的來說:基本上喜歡《長尾理論》的人,都會去看《世界是平的》,不知道你怎麼想,反正豆瓣推薦系統就是這麼認為的。

方法步驟:

1. 收集使用者資訊

同以使用者為基礎(User-based)的協同過濾。

2. 針對項目的最近鄰搜尋

先計算己評價項目和待預測項目的相似度,并以相似度作為權重,權重各已評價項目的分數,得到待預測項目的預測值。

例如:要對項目 A 和項目 B 進行相似性計算,要先找出同時對 A 和 B 打過分的組合,對這些組合進行相似度計算,常用的算法同基于使用者(User-based)的協同過濾。

3. 産生推薦結果

在使用者使用評價一個商品感興趣後,會自動搜尋改商品相似度最大的前N項條目。

優缺點:

優點:以項目為基礎的協同過濾不用考慮使用者間的差别,是以精度比較差。但是卻不需要使用者的曆史資料,或是進行使用者識别。對于項目來講,它們之間的相似性要穩定很多,是以可以離線完成工作量最大的相似性計算步驟,進而降低了線上計算量,提高推薦效率,尤其是在使用者多于項目的情形下尤為顯著。

缺點:但其仍有許多問題需要解決,最典型的有稀疏問題(Sparsity)和冷啟動問題(Cold-start),開始時效果較差。此外還有新使用者問題和算法健壯性等問題。

3.3 基于模型的協同過濾(Model- based)

以使用者為基礎(User-based)的協同過濾和以項目為基礎(Item-based)的協同過濾統稱為以記憶為基礎(Memory based)的協同過濾技術,他們共有的缺點是資料稀疏,難以處理大資料量下的即時結果,是以發展出以模型為基礎的協同過濾技術。

以模型為基礎的協同過濾(Model-based Collaborative Filtering)是先用曆史資料得到一個模型,再用此模型進行預測。以模型為基礎的協同過濾廣泛使用的技術包括Latent Semantic Indexing、Bayesian Networks…等,根據對一個樣本的分析得到模型。

四、相似度計算算法

4.1 概述

相似度計算算法可以用于計算使用者或者項目相似度。

以項目相似度計算(Item Similarity Computation)為列,通性在于都是從評分矩陣中,為兩個項目i,j挑選出共同的評分使用者,然對這個共同使用者的評分向量,進行計算相似度si,j,

由參考1,參考2如下圖:行代表使用者,列代表項目

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

(注意到是從i,j向量中抽出共有的評論,組成的一對向量,進行相似度計算),

    • 皮爾森相關系數:Person Correlation Coefficient
    • 餘弦相似度:Cosine-based Similarity
    • 矯正餘弦相似度:Adjusted Cosine Similarity

4.2 皮爾森相關系數

皮爾森相關系數也是一種基于相關系數的相似度計算方法,一般為了使計算結果精确,需要找出共同評分的使用者。

記使用者集U為既評論了 i 又評論了 j 的使用者集,那麼對應的皮爾森相關系數計算公式為:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

(其中Ru,i   為使用者u 對項目 i 的評分,對應帶橫杠的為這個使用者集U對項目i的評分評分)

4.3 餘弦相似度

兩個項目 i ,j 視作為兩個m維使用者空間向量,相似度計算通過計算兩個向量的餘弦夾角,那麼,對于m*n的評分矩陣,i ,j 的相似度sim( i , j ) 計算公式:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

(其中 " · "記做兩個向量的内積)

4.4 矯正餘弦相似度

餘弦相似度計算并沒有考慮到不同的使用者的評分尺度差異性,也就是說有的使用者評分更寬容普遍打分較高,有的使用者評分更嚴格,普遍打分較低。矯正餘弦相似度正式為了克服這一缺點,通過求出每位使用者的平均打分,調整評分向量為評分偏差向量,再進行求解餘弦相似度。

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

(其中帶橫杠的為第u個使用者的平均評分)

4.5 基于項目相似度與基于使用者相似度的差異

上述三個相似度公式是基于項目相似度場景下的,而實際上,基于使用者相似度與基于項目相似度計算的一個基本的差別是,基于使用者相似度是基于評分矩陣中的行向量相似度求解,基于項目相似度計算式基于評分矩陣中列向量相似度求解,然後三個公式分别都可以适用,如下圖:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

(其中,為0的表示未評分)

  • 基于項目相似度計算式計算如Item3,Item4兩列向量相似度;
  • 基于使用者相似度計算式計算如User3,User4量行向量相似度。

最終的計算公式方法均相同。具體可具體參考《Toward the next generation of recommender systems: A survey of the state-of-the-art and possible extensions》2.2節

4.6 相似度計算不足與改進

基于評分矩陣相似度計算所面臨的一個性能問題,資料稀疏下,精度很差,因為相似度計算是基于尋找擁有共同使用者評分的項目或者共同項目評分的使用者,在資料稀疏下,兩個向量中空值過多,導緻計算共同評分次元過低,甚至就沒有共同評分。

對于資料稀疏性這種情況下,一個嘗試的途徑是進行對評分矩陣進行填充。

填充規則有很多,一種通用的方法是,填充均分,具體如下兩種:

  • 基于使用者均分:填充對應使用者的平均打分
  • 基于項目均分:基于對應項目的平均打分
推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額
推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

          (基于使用者均分填充)                                       (基于項目均分填充)

五、協同過濾靈活實踐

5.1 概述

首先參考Slope one的wiki百科的一段話(此章節按照Slope one的wiki百科重新整理):

當可以對一些項目評分的時候,比如人們可以對一些東西給出1到5星的評價的時候,協同過濾意圖基于一個個體過去對某些項目的評分和(龐大的)由其他使用者的評價構成的資料庫,來預測該使用者對未評價項目的評分。

In this context, item-based 協同過濾系統[根據其它項目的評分來預測某項目的分值,一般方法為 線性回歸 (f(x) = ax + b). 于是,當有1000個項目時,需要列多達1,000,000個線性回歸方程, 以及多達2,000,000個回歸量。除非我們隻選擇某些使用者共同評價過的項目對,否則協同過濾會遇到過适 問題。

另外一種更好的方法是使用更簡單一些的式子,比如 f(x) = x + b:實驗證明當使用一半的回歸量的時候,該式子(稱為Slope One)的表現有時優于[2] 線性回歸方程。該簡化方法也不需要那麼多存儲空間和延遲。

基于奧卡姆剃刀原則:“切勿浪費較多東西,去做‘用較少的東西,同樣可以做好的事情’。”

基于項目相似度協同過濾的一種簡化的思想Slope One算法也就反映出了更加實用之處。

附帶一句,關于推薦系統等算法,靈活開發實作,可以嘗試看下《集體智慧程式設計》(Programming Collective Intelligence),Python實作。

5.2 Slope One算法

為了大大減少過适的發生,提升算法簡化實作, Slope One 系列易實作的Item-based協同過濾算法被提了出來。本質上,該方法運用更簡單形式的回歸表達式(f(x) = x + b) 和單一的自由參數,而不是一個項目評分和另一個項目評分間的線性回歸 (f(x) = ax + b)。 該自由參數隻不過就是兩個項目評分間的平均內插補點。甚至在某些執行個體當中,它比線性回歸的方法更準确[2],而且該算法隻需要一半(甚至更少)的存儲量。

基本原理

如下圖評分矩陣:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

基于UserA對Item1與Item2的評分,以及UserB對Item1的打分,Slope One算法思想對于UserB對于Item2的預測評分為 2 +(1.5-1)=2.5.

從這裡可以看出,Slope One的思想是,每次隻着眼兩點,因為兩點确定一條直線嘛,而且對于這兩點Item 1與Item2,User A都經過,User B經過其中1點,Slope One思想假設User B與User A這條直線表現同一斜率:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

應用場景

如下圖評分矩陣

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

要預測Lucy對項目1的評分:

  • 項目1與項目2間的均內插補點(5-3)+(3-4)/2 =0.5,(John線與Mark線)
  • 項目1與項目3間的均內插補點(5-2)/1 =3(John線)

那麼Lucy對于項目1的評分預測可以基于項目1與項目2,以及項目1與項目3的兩個均內插補點,3項線來預測,項線幾道對應均內插補點的權重上。也就有

rate(lucy,項目1)=((0.5+2)*2+(3+5)*1)/(2+1)=4.33

想要實作 Slope One,隻需要計算并存儲“n”對評分間的平均內插補點和評價數目即可。

算法複雜度

設有“n”個項目,“m”個使用者,“N”個評分。計算每對評分之間的內插補點需要n(n-1)/2 機關的存儲空間,最多需要 m*n*n步.

假設使用者已經評價了最多 y 個項目, 那麼計算不超過n*n+m*y*y個項目間計算內插補點是可能的。

如果一個使用者已經評價過“x”個項目,預測單一的項目評分需要“x“步,而對其所有未評分項目做出評分預測需要最多 (n-x)x 步. 當一個使用者已經評價過“x”個項目時,當該使用者新增一個評價時,更新資料庫需要 x步。

可以通過分割資料(參照分割和稀疏存儲(沒有共同評價項目的使用者可以被忽略)來降低存儲要求。

還不想親自實作?找開源吧

開源的Slope one的程式包

Python: 

http://www.serpentine.com/blog/2006/12/12/collaborative-filtering-made-easy/ 

Java: 

http://taste.sourceforge.net/ 

http://www.daniel-lemire.com/fr/documents/publications/SlopeOne.java 

http://www.nongnu.org/cofi/ 

PHP: 

http://sourceforge.net/projects/vogoo 

http://www.drupal.org/project/cre 

http://www.daniel-lemire.com/fr/documents/publications/webpaper.txt Slope one算法作者寫的,簡單明了。

5.3 Amazon的item-to-item專利算法

在更加普遍的場景中,人們并不總是能給出評分,當使用者隻提供二進制資料(購買與否)的時候,就無法應用Slope One 和其它基于評分的算法。但是卻有一個更簡單更簡單的方法:Amazon的 item-to-item 專利算法

item-to-item算法是二進制 item-based協同過濾應用的例子之一,該算法中用二進制向量表示使用者-項目購買關系的矩陣,并計算二進制向量間的cosine相關系數。

如以下應用場景:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額
  • 在本例當中,項目1和項目2間的cosine相關系數為:
    推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額
  • 項目1和項目3間的cosine相關系數為:
    推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額
  • 而項目2和項目3的cosine相關系數為:
    推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

于是,浏覽項目1的顧客會被推薦買項目3,而浏覽項目2的顧客會被推薦買項目3,浏覽了項目3的會被推薦買1(并由1推薦2)。該模型隻使用了每對項目間的一個參數(cosine相關系數)來産生推薦。是以,如果有n個項目,則需要計算和存儲 n(n-1)/2次cosine相關系數。

六、算法評價名額

推薦系統,協同過濾領域,在科學研究上的一些評價名額主要有MAE,AUC,MAP,[email protected],P·R·F曲線。而實際應用中還要考慮到系統伸縮性,算法複雜度,等等,那些就不說了,P·R·F名額參考我之前的一篇文章:《資訊檢索基本評價名額-P·R·F》

以下名額詳細界定參考論文《Mining mood-specific movie similarity with matrix factorization for context-aware recommendation》及《New Approaches to Mood-based Hybrid Collaborative Filtering》

6.1 平均絕對誤差 MAE(Mean Absolute Error)

通過計算預測的使用者評分與實際的使用者評分之間誤差來度量。主要結合交叉驗證來實作,公式如下:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

(其中,g(authentic)為真實評分,g(prediction)為預測評分,Gtest,為整個待預測使用者評分集)

6.2平均準确率MAP(Mean Aaverage Precision)

MAP是資訊檢索中解決P·R·F名額的不足,而提出的,其規範的定義是,設P(R)為系統在召回率為R時的準确率。

單個主題的平均準确率是每篇相關文檔檢索出後的準确率的平均值。主集合的平均準确率(MAP)是每個主題的平均準确率的平均值。 MAP 是反映系統在全部相關文檔上性能的單值名額。系統檢索出來的相關文檔越靠前(rank 越高),MAP就可能越高。

一個簡單的比方就是(參考):

設有兩個主題,主題1有4個相關網頁,主題2有5個相關網頁。某系統對于主題1檢索出4個相關網頁,其rank分别為1, 2, 4, 7;對于主題2檢索出3個相關網頁,其rank分别為1,3,5。

對于主題1,平均準确率為(1/1+2/2+3/4+4/7)/4=0.83。

對于主題 2,平均準确率為(1/1+2/3+3/5+0+0)/5=0.45。

則MAP= (0.83+0.45)/2=0.64。

應用與協同過濾中的衡量時,也即是測量系統傳回推薦項目對應真實使用者喜愛偏好的排名的平均準确率。公式如下:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

其中:U為測試使用者集,|U|表示使用者集的數目,| Ri |表示使用者 ui 相關的項目(如電影)資料, ri,j 表示系統為使用者ui 推薦的第 j 個相關項目對于使用者 ui 實際的偏好排名。

6.3 [email protected]測度

測量對于給定使用者ui,前n推薦項目中相關項所占比率。如下公式

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

6.4 AUC(Area Under Curve)

對于使用者u,推薦性能AUC 衡量名額計算公式如下:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

其中h(x)是一個名額函數,即若參數值x>0或者邏輯真,着函數值為1,否則為0,Pair(u)是一組使用者u待計算的配對集值:

推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額

其中Tr(u)是訓練集中使用者u已經有的項目集,Ts(u)為測試集中使用者實際預期應該被推薦的項目,實際上,這裡面的 n 也就是測試集不應該被推薦的項目。AUC取值[0,1],最好的就是1了。

其實以上可以看出,AUC是相對其他準确率測度最不直接的一個,理由是AUC涉及到所有配對,包含相關的項目以及不相關的項目(那些即不出現在訓練集,也不出現在測試集中),盡管如此,因為通常資料集中不相關的項目比相關項目多得多,表明了AUC可以對于項目排序的變化沒有那麼敏感。

一些參考:

  • http://zh.wikipedia.org/zh-cn/%E5%8D%94%E5%90%8C%E9%81%8E%E6%BF%BE
  • http://www.cs.carleton.edu/cs_comps/0607/recommend/recommender/
  • http://www.cs.carleton.edu/cs_comps/0607/recommend/recommender/svd.html
  • http://wenku.baidu.com/view/e12b10ea81c758f5f61f67fb.html
  • http://zh.wikipedia.org/wiki/Slope_one
  • http://www.kuqin.com/algorithm/20080903/16387.html
  • http://www.cnblogs.com/kuber/archive/2008/06/10/1216846.html
  • 更多參照文章中的連結
推薦系統之協同過濾概述http://www.vanjor.org/blog/2011/05/rs-collaborative-filtering/這篇文章講得可真夠細的推薦系統之協同過濾概述一、背景二、分類概述三、協同過濾三大分類四、相似度計算算法五、協同過濾靈活實踐六、算法評價名額
  • 前一篇: 算法:圖論中Dijkstra最短路徑搜尋算法
  • 後一篇: 算法:求字元串指定最小全集子串

發表:技術相關, 資料挖掘

标簽:協同過濾 推薦系統 資料挖掘 相似度計算

跟蹤評論 RSS 2.0 訂閱. 你可以跳轉到頁底,留下評論. 暫無法追蹤.



posted on 2011-11-30 08:59  lexus 閱讀( ...) 評論( ...) 編輯 收藏

轉載于:https://www.cnblogs.com/lexus/archive/2011/11/30/2268549.html