Programming Collective Intelligence 讀書筆記之 Recommandation

第二章進入正題,Making Recommandation 引入一個重要概念: Collabrative Filtering, 即協(xié)同過濾。

書中以電影評價系統(tǒng)和推薦系統(tǒng)為例解析協(xié)同過濾的概念及應用。首先以nested dictionary為載體用python建立一系列包含人名,片名,評分的數(shù)據(jù)。然后拋出問題: how to find similar users? 即如何從海量數(shù)據(jù)分析中尋獲品位相似的用戶。

相似度計算體系:Euclidean Distance Score (歐式距離)
歐式距離在數(shù)學中的定義為N維歐式空間兩點間的距離。書中以簡單的二維空間為例



以書中圖片為例,建立以兩個片名為坐標軸的二維坐標系,將人名和他們對應的對于兩部影片的評分作為點置于圖中。然后計算每一個維度的距離平方,相加后再做方計算出值來表示這個距離。暫將這個值標位D。很明顯,D的值隨著兩點間的距離變大而變大,取值范圍飄忽不定。進一步優(yōu)化公式,算的1/(1+D), 使得這個值永遠介于0和1之間,數(shù)值越接近一,樣本的相似度越高。

相似度計算體系:Pearson Correlation Score (皮爾遜相關系數(shù))
這個系數(shù)是用來判斷兩組數(shù)的線性相關程度的。這個系數(shù)的計算更加復雜但是更為精確。大黃試著用大白話理解這里的意義,用電影評價的例子來看,有三個人A,B,C,其中A,B的歐式距離比B,C要小,但是觀察數(shù)據(jù)發(fā)現(xiàn),A,B對于很多電影的評分都有分歧,即對于某些電影A給分高,B給分低,另外一些相反。但是B,C的評價體系卻非常相似,即對于某些電影B給了“高分”,C也是。這里的高分我用引號括起來,意思是相對高分,也就是在B自己的體系里,某一部電影分數(shù)高,但絕對分數(shù)并不一定。換一種說法就是B,C對于電影的絕對分數(shù)評價差距較大,但是對于這些電影給出的排名卻非常一致,這時候我們就需要這個皮爾遜相關系數(shù)來判定他倆才是相似度較高的用戶了。皮爾遜相關系數(shù)的數(shù)學表達式為 x和y的協(xié)方差/(x的標準差*y的標準差),這個結果會落在-1和1之間,越接近1,相關性越強。


CodeCogsEqn.gif

兩兩的問題解決后,我們自然可以以某一個目標用戶為基礎,計算所有其他用戶和他的相關性,并找出和他相關性最高的那個人,從而將那個人的電影推薦給目標用戶

在解決了上述相關性問題后,作者再次拋出疑問,找到一個相似性很高的用戶是否已經(jīng)足夠去推薦電影,會不會出現(xiàn)一些情況比如有一些很適合我的電影,相關性很高的那個人并沒有看過或者評分過,或者相關性很高的那個人在某一部電影的評分上和其他人完全相悖,給了個很低的分數(shù),但其實在絕大部分人眼中那是部好電影。如果僅僅使用用戶相關性,這樣的電影推薦就會被忽視。這是下一個需要解決的問題。
解決這個問題的途徑便是利用權重。再次截取書中的圖表:


P2.PNG

圖片中,每個用戶和目標用戶都有相關度數(shù)值,作為權重,都有對于某一部作品的評分,相乘后的積再求和,除以權重,得到最后的分數(shù),可以看到最后一行的數(shù)據(jù)為判定推薦與否的終值。

下一部分書中簡要介紹了另一個維度的推薦,即推薦產(chǎn)品相關性較高的其他產(chǎn)品,從編程的角度這并不難辦,即將python的dictionary變更Key和Value來重新計算相關性。這種推薦常見于對目標用戶數(shù)據(jù)不足的情況,比如書中列舉的在amazon買書時,進入該書的頁面后會看到“買了這本書的用戶還買了”這樣的推薦版塊。

這一章節(jié)到此依然沒有結束,作者引入了兩個新概念:User-Based Filtering和Item-Based Filtering。之前的例子中基本都是基于用戶的過濾,但是對于一個非常龐大,擁有指數(shù)級用戶的網(wǎng)站或者系統(tǒng),做這樣的過濾是非常緩慢的,而且由于用戶的行為非常頻繁,所以計算的結果也需要實時變更,那么這個時候這種策略將失去優(yōu)勢。于是轉向了基于項目的過濾,對于某一用戶,先找出他的歷史數(shù)據(jù),將位列前排的項目提取出來,然后通過類似于前面介紹的權重體系獲取其他項目的相關性。這樣做的好處是項目的更新頻率相對用戶是更低的,很多計算不需要實時的數(shù)據(jù),可以預先計算保留結果,大大提高了推薦系統(tǒng)的效率和速度。這種策略特別時候用戶基數(shù)很大的情況。

最后,對于如何選擇基于用戶還是基于項目,作者給出一條結論:“Item-based filtering usually outperforms user-based filtering in sparse datasets, and the two perform about equally in dense datasets”。這樣的結論是基于數(shù)據(jù)量和運算速度的,這兩種過濾方式在現(xiàn)實中都有實際存在和應用的場景,不可以一概選擇其中一種。

本章最后的練習中提到了另一個指標:Tanimoto score。這個指標是用于計算符號度量或布爾值度量的個體間的相似度的。當參考樣本無法量化評分,而只是例如用是或否,大小這樣的指標來衡量,則Tanimoto score是用來計算相似度的一個好方式。


CodeCogsEqn (1).gif

公式很簡單,兩者相同選項總數(shù)除以兩者不同選項總數(shù)和。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容