第二章進入正題耕姊,Making Recommandation 引入一個重要概念: Collabrative Filtering, 即協(xié)同過濾页藻。
書中以電影評價系統(tǒng)和推薦系統(tǒng)為例解析協(xié)同過濾的概念及應(yīng)用冗懦。首先以nested dictionary為載體用python建立一系列包含人名扰付,片名抗碰,評分的數(shù)據(jù)集灌。然后拋出問題: how to find similar users? 即如何從海量數(shù)據(jù)分析中尋獲品位相似的用戶晚凿。
相似度計算體系:Euclidean Distance Score (歐式距離)
歐式距離在數(shù)學(xué)中的定義為N維歐式空間兩點間的距離峭竣。書中以簡單的二維空間為例
以書中圖片為例,建立以兩個片名為坐標軸的二維坐標系晃虫,將人名和他們對應(yīng)的對于兩部影片的評分作為點置于圖中皆撩。然后計算每一個維度的距離平方,相加后再做方計算出值來表示這個距離哲银。暫將這個值標位D扛吞。很明顯,D的值隨著兩點間的距離變大而變大荆责,取值范圍飄忽不定滥比。進一步優(yōu)化公式,算的1/(1+D)做院, 使得這個值永遠介于0和1之間盲泛,數(shù)值越接近一,樣本的相似度越高键耕。
相似度計算體系:Pearson Correlation Score (皮爾遜相關(guān)系數(shù))
這個系數(shù)是用來判斷兩組數(shù)的線性相關(guān)程度的寺滚。這個系數(shù)的計算更加復(fù)雜但是更為精確。大黃試著用大白話理解這里的意義屈雄,用電影評價的例子來看村视,有三個人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ù)評價差距較大,但是對于這些電影給出的排名卻非常一致绣否,這時候我們就需要這個皮爾遜相關(guān)系數(shù)來判定他倆才是相似度較高的用戶了誊涯。皮爾遜相關(guān)系數(shù)的數(shù)學(xué)表達式為 x和y的協(xié)方差/(x的標準差*y的標準差),這個結(jié)果會落在-1和1之間蒜撮,越接近1暴构,相關(guān)性越強。
兩兩的問題解決后段磨,我們自然可以以某一個目標用戶為基礎(chǔ)取逾,計算所有其他用戶和他的相關(guān)性,并找出和他相關(guān)性最高的那個人苹支,從而將那個人的電影推薦給目標用戶
在解決了上述相關(guān)性問題后砾隅,作者再次拋出疑問,找到一個相似性很高的用戶是否已經(jīng)足夠去推薦電影债蜜,會不會出現(xiàn)一些情況比如有一些很適合我的電影晴埂,相關(guān)性很高的那個人并沒有看過或者評分過,或者相關(guān)性很高的那個人在某一部電影的評分上和其他人完全相悖寻定,給了個很低的分數(shù)儒洛,但其實在絕大部分人眼中那是部好電影。如果僅僅使用用戶相關(guān)性特姐,這樣的電影推薦就會被忽視晶丘。這是下一個需要解決的問題。
解決這個問題的途徑便是利用權(quán)重唐含。再次截取書中的圖表:
圖片中浅浮,每個用戶和目標用戶都有相關(guān)度數(shù)值,作為權(quán)重捷枯,都有對于某一部作品的評分滚秩,相乘后的積再求和,除以權(quán)重淮捆,得到最后的分數(shù)郁油,可以看到最后一行的數(shù)據(jù)為判定推薦與否的終值。
下一部分書中簡要介紹了另一個維度的推薦攀痊,即推薦產(chǎn)品相關(guān)性較高的其他產(chǎn)品桐腌,從編程的角度這并不難辦,即將python的dictionary變更Key和Value來重新計算相關(guān)性苟径。這種推薦常見于對目標用戶數(shù)據(jù)不足的情況案站,比如書中列舉的在amazon買書時,進入該書的頁面后會看到“買了這本書的用戶還買了”這樣的推薦版塊棘街。
這一章節(jié)到此依然沒有結(jié)束蟆盐,作者引入了兩個新概念:User-Based Filtering和Item-Based Filtering。之前的例子中基本都是基于用戶的過濾遭殉,但是對于一個非常龐大石挂,擁有指數(shù)級用戶的網(wǎng)站或者系統(tǒng),做這樣的過濾是非常緩慢的险污,而且由于用戶的行為非常頻繁痹愚,所以計算的結(jié)果也需要實時變更,那么這個時候這種策略將失去優(yōu)勢蛔糯。于是轉(zhuǎn)向了基于項目的過濾里伯,對于某一用戶,先找出他的歷史數(shù)據(jù)渤闷,將位列前排的項目提取出來疾瓮,然后通過類似于前面介紹的權(quán)重體系獲取其他項目的相關(guān)性。這樣做的好處是項目的更新頻率相對用戶是更低的飒箭,很多計算不需要實時的數(shù)據(jù)狼电,可以預(yù)先計算保留結(jié)果,大大提高了推薦系統(tǒng)的效率和速度弦蹂。這種策略特別時候用戶基數(shù)很大的情況肩碟。
最后,對于如何選擇基于用戶還是基于項目凸椿,作者給出一條結(jié)論:“Item-based filtering usually outperforms user-based filtering in sparse datasets, and the two perform about equally in dense datasets”削祈。這樣的結(jié)論是基于數(shù)據(jù)量和運算速度的,這兩種過濾方式在現(xiàn)實中都有實際存在和應(yīng)用的場景,不可以一概選擇其中一種髓抑。
本章最后的練習(xí)中提到了另一個指標:Tanimoto score咙崎。這個指標是用于計算符號度量或布爾值度量的個體間的相似度的。當(dāng)參考樣本無法量化評分吨拍,而只是例如用是或否褪猛,大小這樣的指標來衡量,則Tanimoto score是用來計算相似度的一個好方式羹饰。
公式很簡單伊滋,兩者相同選項總數(shù)除以兩者不同選項總數(shù)和。