1. 基本思想
協(xié)同過(guò)濾推薦算法是最經(jīng)典的推薦算法午乓,它的算法思想為物以類聚硼控,人以群分蜈块,基本的協(xié)同過(guò)濾算法基于以下的假設(shè):
- User-based CF 基于用戶的協(xié)同過(guò)濾推薦:“跟你愛好相似的人喜歡的東西你也可能會(huì)喜歡”
- Item-based CF 基于物品的協(xié)同過(guò)濾推薦:“跟你喜歡的東西相似的東西你也可能會(huì)喜歡”
實(shí)現(xiàn)協(xié)同過(guò)濾的步驟:
1). 找到相似的Top-N個(gè)人或者物品:計(jì)算兩兩的相似度并進(jìn)行排序
2). 根據(jù)相似的人或物品產(chǎn)生推薦結(jié)果:利用Top-N生成初始推薦結(jié)果袖瞻,然后過(guò)濾掉用戶已經(jīng)有過(guò)記錄或者明確表示不喜歡的物品
那么辙诞,如何計(jì)算相似度呢褪子?
2. 相似度計(jì)算
根據(jù)數(shù)據(jù)類型的不同量淌,相似度的計(jì)算方式也不同,數(shù)據(jù)類型有:
- 實(shí)數(shù)型(物品評(píng)分情況)
- 布爾型(用戶的行為:是否點(diǎn)擊嫌褪、是否收藏呀枢、是否點(diǎn)贊等)
一般的,相似度計(jì)算有杰卡德相似度笼痛、余弦相似度裙秋、皮爾遜相關(guān)系數(shù)
-
余弦相似度
度量的是兩個(gè)向量之間的夾角,用夾角的余弦值來(lái)度量相似的情況
-
余弦相似度與向量長(zhǎng)度無(wú)關(guān)缨伊,一般計(jì)算時(shí)都要對(duì)向量長(zhǎng)度進(jìn)行歸一化摘刑,兩個(gè)向量只要方向一致,無(wú)論程度強(qiáng)弱刻坊,都視為“相似”
n維空間點(diǎn)a(
)與b(
)間的余弦相似度(兩個(gè)n維向量):
-
皮爾遜相關(guān)系數(shù)
- 實(shí)際上也是一種余弦相似度枷恕,不過(guò)先對(duì)向量做了中心化,向量a,b各自減去向量的均值后谭胚,再計(jì)算余弦相似度
- 度量的是兩個(gè)變量的變化趨勢(shì)是否一致徐块,不適合計(jì)算布爾值向量之間的相關(guān)度
- 計(jì)算結(jié)果在[-1,1]之間,-1表示負(fù)相關(guān)灾而,1表示正相關(guān)
n維空間點(diǎn)a()與b(
)間的皮爾遜相關(guān)系數(shù)(兩個(gè)n維向量):
-
杰卡德相似度
- 兩個(gè)集合的交集元素個(gè)數(shù)在并集中所占的比例胡控,非常適用于布爾向量表示
余弦相似度和皮爾遜相關(guān)系數(shù)適合用戶評(píng)分?jǐn)?shù)據(jù)(實(shí)數(shù)值)
杰卡德相似度適用于隱式反饋數(shù)據(jù)(0,1 布爾值)
3. 關(guān)于用戶-物品評(píng)分矩陣
在協(xié)同過(guò)濾推薦算法中,我們更多的是利用用戶對(duì)物品的評(píng)分?jǐn)?shù)據(jù)集旁趟,預(yù)測(cè)用戶對(duì)沒有評(píng)分過(guò)的物品的評(píng)分結(jié)果昼激。
用戶-物品的評(píng)分矩陣,根據(jù)評(píng)分矩陣的稀疏程度會(huì)有不同的解決方案锡搜。
-
稠密評(píng)分矩陣
用戶/物品 物品A 物品B 物品C 物品D 物品E 用戶1 5 3 4 4 ? 用戶2 3 1 2 3 3 用戶3 4 3 4 3 5 用戶4 3 3 1 5 4 用戶5 1 5 5 2 1 -
稀疏評(píng)分矩陣
用戶/物品 物品A 物品B 物品C 物品D 物品E 用戶1 5 3 4 ? ? 用戶2 ? ? ? 3 3 用戶3 4 3 4 ? 5 用戶4 ? 3 ? 5 ? 用戶5 1 ? 5 ? 1
使用協(xié)同過(guò)濾推薦算法預(yù)測(cè)評(píng)分-稠密評(píng)分矩陣
目的:預(yù)測(cè)用戶1對(duì)于物品E的評(píng)分
步驟分析:
- 構(gòu)架數(shù)據(jù)集
- 計(jì)算用戶兩兩之間及物品兩兩之間相似度癣猾,對(duì)于評(píng)分?jǐn)?shù)據(jù)這里我們采用皮爾遜相關(guān)系數(shù)
- 評(píng)分預(yù)測(cè):
- User-based CF:取出與用戶1正相關(guān)的用戶,使用用戶間相似度余爆。公式如下纷宇,該方案考慮了用戶本身的評(píng)分及近鄰用戶的加權(quán)評(píng)分相似度打分:
- Item-based CF:取出與物品E正相關(guān)的物品,使用物品間相似度蛾方。公式如下像捶,該方案結(jié)合了預(yù)測(cè)物品與相似物品的加權(quán)評(píng)分相似度打分:
- User-based CF:取出與用戶1正相關(guān)的用戶,使用用戶間相似度余爆。公式如下纷宇,該方案考慮了用戶本身的評(píng)分及近鄰用戶的加權(quán)評(píng)分相似度打分:
實(shí)現(xiàn)過(guò)程
- 構(gòu)建數(shù)據(jù)集:注意構(gòu)建評(píng)分矩陣時(shí)上陕,對(duì)于缺失的部分需要保留為None,如果設(shè)置為0那么會(huì)被當(dāng)做評(píng)分0
import pandas as pd
users = ["User1", "User2", "User3", "User4", "User5"]
items = ["Item A", "Item B", "Item C", "Item D", "Item E"]
# 用戶購(gòu)買記錄數(shù)據(jù)集
datasets = [
[5,3,4,4,None],
[3,1,2,3,3],
[4,3,4,3,5],
[3,3,1,5,4],
[1,5,5,2,1],
]
- 計(jì)算用戶兩兩之間及物品兩兩之間相似度拓春,對(duì)于評(píng)分?jǐn)?shù)據(jù)這里我們采用皮爾遜相關(guān)系數(shù)
pandas中corr方法可直接用于計(jì)算皮爾遜相關(guān)系數(shù)
df = pd.DataFrame(datasets,index=users,columns=items)
print("用戶之間的兩兩相似度:")
# 直接計(jì)算皮爾遜相關(guān)系數(shù)
# 默認(rèn)是按列進(jìn)行計(jì)算释簿,因此如果計(jì)算用戶間的相似度,當(dāng)前需要進(jìn)行轉(zhuǎn)置
user_similar = df.T.corr()
user_similar.round(4)
print("物品之間的兩兩相似度:")
item_similar = df.corr()
item_similar.round(4)
用戶之間的兩兩相似度:
- | User1 | User2 | User3 | User4 | User5 |
---|---|---|---|---|---|
User1 | 1.0000 | 0.8528 | 0.7071 | 0.0000 | -0.7921 |
User2 | 0.8528 | 1.0000 | 0.4677 | 0.4900 | -0.9001 |
User3 | 0.7071 | 0.4677 | 1.0000 | -0.1612 | -0.4666 |
User4 | 0.0000 | 0.4900 | -0.1612 | 1.0000 | -0.6415 |
User5 | -0.7921 | -0.9001 | -0.4666 | -0.6415 | 1.0000 |
物品之間的兩兩相似度:
- | Item A | Item B | Item C | Item D | Item E |
---|---|---|---|---|---|
Item A | 1.0000 | -0.4767 | -0.1231 | 0.5322 | 0.9695 |
Item B | -0.4767 | 1.0000 | 0.6455 | -0.3101 | -0.4781 |
Item C | -0.1231 | 0.6455 | 1.0000 | -0.7206 | -0.4276 |
Item D | 0.5322 | -0.3101 | -0.7206 | 1.0000 | 0.5817 |
Item E | 0.9695 | -0.4781 | -0.4276 | 0.5817 | 1.0000 |
-
評(píng)分預(yù)測(cè)
基于用戶相似度計(jì)算 用戶1對(duì)于商品E的評(píng)分
1).根據(jù)user_similar獲取用戶1相似的兩個(gè)用戶為:User2硼莽,User3
2).User2庶溶,User3對(duì)商品E的評(píng)分分別為3.0和5.0
3).計(jì)算用戶1對(duì)于商品E的評(píng)分:(0.85283.0+0.70715.0)/(0.8528+0.7071)=3.91基于物品相似度計(jì)算 用戶1對(duì)于商品E的評(píng)分
1).根據(jù)item_similar獲取商品E相似的兩個(gè)商品為商品A和商品D
2).用戶1對(duì)于商品A和商品D的評(píng)分分別為5和4
3).計(jì)算用戶1對(duì)于商品E的評(píng)分:(0.96955+0.58174)/(0.9695+0.5817)=4.625
對(duì)比可見,User-based CF 和 Item-based CF 的結(jié)果是有差異的懂鸵,因?yàn)閲?yán)格意義上他們應(yīng)該是屬于兩種不同的推薦算法偏螺,各自在不同的領(lǐng)域,會(huì)比另一種更佳匆光,但是具體場(chǎng)景下哪種更合適套像,需要進(jìn)行合理的評(píng)估,因此在實(shí)現(xiàn)推薦系統(tǒng)時(shí)终息,這兩種算法往往都是需要實(shí)現(xiàn)的夺巩,然后根據(jù)推薦的效果分析選出更優(yōu)方案。