寫在前面
先啰嗦幾句高职,最近在看《集體智慧編程》,為了加深記憶辞州,把學(xué)習(xí)的內(nèi)容整理成文初厚,后續(xù)還會(huì)寫書中相關(guān)內(nèi)容。既然是讀書筆記孙技,且本人是推薦算法入門選手,所以內(nèi)容只能局限于此書排作。
什么是協(xié)同過濾
先舉個(gè)生活中的場(chǎng)景牵啦,你想聽歌卻不知道聽什么的時(shí)候,會(huì)向你身邊與你品位類似的朋友求助妄痪,從而獲得他的推薦哈雏。協(xié)同過濾(Collaborative Filtering,簡(jiǎn)稱CF)就像與你品味相近的朋友,通過對(duì)大量結(jié)構(gòu)化數(shù)據(jù)進(jìn)行計(jì)算裳瘪,找出與你相似的其他用戶(user)或與你喜歡的物品(item)相似的物品土浸,從而實(shí)現(xiàn)物品推薦。
協(xié)同過濾分為兩類:基于用戶的協(xié)同過濾(User-Based CF)和基于物品的協(xié)同過濾(Item-Based CF)彭羹。結(jié)合前文的介紹便不難理解分別的應(yīng)用場(chǎng)景黄伊。
計(jì)算相似度之前需要先準(zhǔn)備一些如下表所示的數(shù)據(jù)集:
用戶 | 戰(zhàn)爭(zhēng) | 喜歡 | 春風(fēng)吹 | 迷宮 |
---|---|---|---|---|
小明 | 4 | 3 | - | 5 |
小強(qiáng) | 5 | 1 | 3 | 4 |
小王 | 2 | 4 | 3 | 5 |
小利 | 4 | 3 | 2 | 1 |
它是一種表達(dá)不同人對(duì)不同物品偏好的方式,例如音樂應(yīng)用可以用0和1表示喜歡不喜歡和喜歡派殷。
User-Based CF
如果你和小明對(duì)于音樂的品位相似还最,假如小明喜歡聽Adele,那么你也有可能喜歡聽毡惜。好了拓轻,問題來了:
- 如何衡量?jī)蓚€(gè)用戶是否相似?
- 如何根據(jù)相似用戶推薦物品经伙?
相似度計(jì)算
相似度通過如下公式計(jì)算得到:
y = f(data, user1, user2)
其中扶叉,data就是前文提到的數(shù)據(jù)集,user1和user2表示要比較的兩個(gè)用戶或物品帕膜。書中主要介紹了兩種相似度計(jì)算函數(shù):歐幾里得距離評(píng)價(jià)枣氧、皮爾遜相關(guān)度評(píng)價(jià)。
歐幾里得距離
它以經(jīng)過人們一致評(píng)價(jià)的物品為坐標(biāo)軸泳叠,然后將參與評(píng)價(jià)的人繪制到圖上作瞄,并考察他們彼此間的距離遠(yuǎn)近。輸出滿足y∈[0,1]危纫,1表示user1和user2具有相同的偏好宗挥,0表示user1和user2偏好不同。
皮爾遜相關(guān)度
它是比歐幾里得距離更復(fù)雜的一種表示相似度的方法种蝶。用于判斷兩組數(shù)據(jù)與某一直線擬合程度契耿,在數(shù)據(jù)不是很規(guī)范的時(shí)候(比如,影評(píng)者對(duì)影片的評(píng)價(jià)總是相對(duì)于平均水平偏離很大時(shí))螃征,會(huì)傾向于給出更好的結(jié)果搪桂。皮爾遜可以簡(jiǎn)單理解為cos(x)函數(shù),所以其輸出滿足y∈[-1,1]盯滚,1表示user1和user2具有相同的偏好踢械,0表示user1和user2偏好不同,-1表示user1和user2偏好負(fù)相關(guān)魄藕。如果難以理解可以參考:如何理解皮爾遜相關(guān)系數(shù)(Pearson Correlation Coefficient)内列?
由于本人高數(shù)上下都是勉強(qiáng)及格,對(duì)于這兩個(gè)函數(shù)理解的也不深背率,所以沒辦法深入淺出的解釋话瞧,不過只要知道每種計(jì)算方法的適應(yīng)范圍和局限性就好了嫩与。
推薦物品
第一個(gè)問題解決了,來看看如何推薦物品交排。如果只是把相似用戶喜歡的物品推薦給被推薦者划滋,未免過于草率,而且又該如何選擇相似用戶呢埃篓。
推薦算法
結(jié)合前文數(shù)據(jù)集進(jìn)行說明处坪。
- 計(jì)算出所有用戶兩兩之間的相似度;
- 指定一個(gè)被推薦者:小明都许;
- 找出其他用戶評(píng)價(jià)過且被推薦者未評(píng)價(jià)的物品:春風(fēng)吹稻薇;
- 以被推薦者與他人的相似度作為權(quán),將權(quán)與其他用戶對(duì)該物品的評(píng)分相乘胶征;
- 【x春風(fēng)吹】一列值之和除以相似度一列值之和塞椎,最終結(jié)果(2.875)便為預(yù)測(cè)的小明對(duì)于春風(fēng)吹的評(píng)分。
用戶 | 相似度 | 戰(zhàn)爭(zhēng) | x戰(zhàn)爭(zhēng) | 喜歡 | x喜歡 | 春風(fēng)吹 | x春風(fēng)吹 | 迷宮 | x迷宮 |
---|---|---|---|---|---|---|---|---|---|
小強(qiáng) | 0.9 | 5 | 4.5 | 1 | 0.9 | 3 | 2.7 | 4 | 3.6 |
小王 | 0.5 | 2 | 1 | 4 | 2 | 3 | 1.5 | 5 | 2.5 |
小利 | 0.2 | 4 | 0.8 | 3 | 0.6 | 2 | 0.4 | 1 | 0.2 |
合計(jì) | 1.6 | - | - | - | - | - | 4.6 | - | - |
注:相似度隨便寫的睛低,并非計(jì)算所得案狠。
至此可以給出推薦算法公式:
y = f(data, user, sim)
其中,data就是前文提到的數(shù)據(jù)集钱雷,user為被推薦者骂铁,sim為相似度計(jì)算函數(shù),可以根據(jù)場(chǎng)景不同選擇不同的計(jì)算函數(shù)罩抗。從輸出總選擇評(píng)分較高的物品推薦給用戶拉庵,從而實(shí)現(xiàn)物品推薦。
Item-Based CF
基于物品的推薦思路是:根據(jù)你評(píng)價(jià)過的物品套蒂,找出與其相似的物品钞支。
相似度計(jì)算
方法與User CF相同,只是我們需要把前文數(shù)據(jù)集進(jìn)行轉(zhuǎn)置操刀,并計(jì)算所有物品兩兩之間的相似度烁挟。
推薦物品
如同User CF,我們不能簡(jiǎn)單的推薦與我們偏好物品類似的物品骨坑。
推薦算法
- 計(jì)算出所有物品兩兩之間的相似度撼嗓;
- 指定一個(gè)被推薦者;
- 找出被推薦者評(píng)價(jià)過的物品欢唾;
- 以被推薦者評(píng)價(jià)過的物品與其他物品的相似度作為權(quán)且警,將權(quán)與被推薦者對(duì)該物品的評(píng)分相乘;
- 【xXX】一列值之和除以相似度一列值之和礁遣,最終結(jié)果便為預(yù)測(cè)的被推薦者對(duì)于其未評(píng)價(jià)過物品的評(píng)分振湾。
歌曲 | 評(píng)分 | 迷宮 | x迷宮 | 所幸 | x所幸 | 來不及 | x來不及 |
---|---|---|---|---|---|---|---|
戰(zhàn)爭(zhēng) | 4 | 0.3 | 1.2 | 0.1 | 0.4 | 0.8 | 3.2 |
喜歡 | 3 | 0.5 | 1.5 | 0.4 | 1.2 | 0.7 | 2.1 |
春風(fēng)吹 | 5 | 0.4 | 2 | 0.2 | 1 | 0.5 | 2.5 |
合計(jì) | - | 1.2 | 4.7 | 0.7 | 2.6 | 2 | 7.8 |
歸一化結(jié)果 | - | - | 3.92 | - | 3.71 | - | 3.9 |
注:相似度隨便寫的,并非計(jì)算所得亡脸;并且根據(jù)說明需要增加了一些音樂
至此可以給出推薦算法公式:
y = f(data, itemMatch, user)
其中押搪,data就是前文提到的數(shù)據(jù)集,user為被推薦者浅碾,itemMatch為所有物品兩兩之間相似度的數(shù)據(jù)集大州,計(jì)算itemMatch時(shí),可以根據(jù)場(chǎng)景不同選擇不同的計(jì)算函數(shù)垂谢。從輸出總選擇評(píng)分較高的物品推薦給用戶厦画,從而實(shí)現(xiàn)基于物品的物品推薦。
如何選擇滥朱?
- 基于物品進(jìn)行過濾的方式要過于基于用戶的方式根暑,不過它需要維護(hù)物品相似度表的額外開銷,這也是它快的原因徙邻;
- 對(duì)于稀疏數(shù)據(jù)集排嫌,Item-Based CF效果優(yōu)于User-Based CF;
- 對(duì)于密集數(shù)據(jù)集缰犁,兩者效果幾乎相同淳地;
- 最重要的是,結(jié)合應(yīng)用場(chǎng)景選擇合適的方法帅容。
一句話心得
我對(duì)于協(xié)同過濾的理解是:
計(jì)算用戶/物品相似度颇象,以相似度作為權(quán)重,對(duì)不同物品進(jìn)行評(píng)分預(yù)測(cè)并徘,從而實(shí)現(xiàn)物品遣钳。