【推荐系统(一)】协同过滤之基于领域的方法(UserCF,ItemCF)
文章目錄
- 一、基于用戶的協(xié)同過濾算法(UserCF)
- 1,找到相似用戶
- 2,推薦未接觸過的物品
- UserCF 改進(jìn)
- 二、基于物品的協(xié)同過濾算法(ItemCF)
- 1,物品相似度計(jì)算
- 2,推薦列表計(jì)算
- ItemCF 改進(jìn)
- 歸一化
- 三、UserCF 與 ItemCF 對(duì)比
- 為何新聞推薦用 UserCF ?
- 為何商品和視頻推薦用 ItemCF?
- UserCF 、ItemCF 優(yōu)缺點(diǎn)的對(duì)比
基于用戶行為分析的推薦算法一般稱為協(xié)同過濾算法。所謂協(xié)同過濾,就是指眾多的用戶可以齊心協(xié)力,通過不斷地和網(wǎng)站互動(dòng),使 自己的推薦列表能夠不斷過濾掉自己不感興趣的物品,從而越來越滿足自己的需求。常見實(shí)現(xiàn)方法的包括:
本文主要講解基于鄰域的方法,又可以細(xì)分為基于用戶的協(xié)同過濾算法(UserCF)和基于物品的協(xié)同過濾算法(ItemCF)。
一、基于用戶的協(xié)同過濾算法(UserCF)
基于用戶是指通過分析用戶對(duì)商品的行為(如瀏覽、收藏、加入購物車、購買……)計(jì)算出哪些用戶是興趣相似的,然后把興趣相似的用戶所關(guān)注的商品相互推薦。
基于用戶的協(xié)同過濾算法(UserCF)的基本思想:當(dāng)給用戶A推薦時(shí),可以先找到和他有相似興趣的其他用戶,然后把相似用戶喜歡的、而用戶A沒有接觸過的物品推薦給A。
UserCF算法分為兩個(gè)步驟:
1,找到相似用戶
假設(shè)有6個(gè)用戶AF,對(duì)編號(hào)為16的物品有不同的行為。不同的行為代表對(duì)商品喜愛程度的不同,假設(shè):瀏覽1分、收藏3分、加入購物車5分、購買10分。
于是可以把不同用戶對(duì)不同商品的喜愛程度轉(zhuǎn)換為評(píng)分矩陣:
| A | 1 | 5 | 3 | |||
| B | 3 | 3 | ||||
| C | 5 | 10 | ||||
| D | 10 | 5 | ||||
| E | 5 | 1 | ||||
| F | 5 | 3 | 1 |
可以看到用戶A和B感興趣的商品完全不同,但是A和E可能有相似的興趣。為了計(jì)算用戶之間的相似度,設(shè)N(u)為用戶 u 有過正反饋的物品集合,N(v) 為用戶 v 有過正反饋的物品集合,用戶 u 和 v 的興趣相似度可以用余弦相似度表示:
cos<u,v>=N(u)?N(v)∣N(u)∣×∣N(v)∣cos<u, v> = \frac{N(u) \cdot N(v)}{\sqrt{|N(u)|\times|N(v)|}} cos<u,v>=∣N(u)∣×∣N(v)∣?N(u)?N(v)?
當(dāng)然還有別的計(jì)算方法,例如:切比雪夫距離、歐里幾得距離、曼哈頓距離、杰卡德距離、皮爾森系數(shù)等。
以余弦相似度的計(jì)算為例子:
cos<A,C>=1×5+5×0+3×012+52+32×52+102=0.08cos <A, C> = \frac{1 \times5 + 5 \times 0 + 3 \times 0}{\sqrt{1^2 + 5^2 + 3^2} \times \sqrt{5^2 + 10^2}} = 0.08 cos<A,C>=12+52+32?×52+102?1×5+5×0+3×0?=0.08
同理可以計(jì)算其他用戶之間的相似度,將它們用矩陣來表示,得到的矩陣稱之為相似度矩陣:
| A | 1 | 0 | 0.08 | 0.15 | 0.93 | 0.43 |
| B | 0 | 1 | 0 | 0.32 | 0 | 0.6 |
| C | 0.08 | 0 | 1 | 0.4 | 0 | 0.15 |
| D | 0.15 | 0.32 | 0.4 | 1 | 0 | 0 |
| E | 0.93 | 0 | 0 | 0 | 1 | 0.5 |
| F | 0.43 | 0.6 | 0.15 | 0 | 0.5 | 1 |
表中數(shù)值越大,表示相似度越高。按相似度排序,可以輕易找到與用于u最相似的 k 個(gè)用戶。
2,推薦未接觸過的物品
接下來可以用上面的相似度矩陣來給用戶推薦和他興趣相似的用戶喜歡的物品。用戶 u 對(duì)物品 i 的興趣程度可以估計(jì)為:
p(u,i)=∑v∈S(u,K)∩N(i)wuvrvip(u,i) = \sum_{v\in{S(u,K)\cap N(i)}} w_{uv}r_{vi} p(u,i)=v∈S(u,K)∩N(i)∑?wuv?rvi?
其中,S(u,K) 為和用戶 u 興趣最接近的 K 個(gè)用戶, N( i ) 為對(duì)物品 i 有正反饋的用戶集合, wuvw_{uv}wuv? 為用戶 u 和用戶 v 的興趣相似度, rvir_{vi}rvi?為用戶 v 對(duì)物品 i 的興趣。
這個(gè)式子是先找到 K個(gè) 與用戶 u 相似 并且 對(duì)物品 i 有過興趣 的用戶集合,然后對(duì)集合中的每個(gè) v 計(jì)算:
( 用戶 u 和相似用戶 v 的相似程度wuvw_{uv}wuv? ) X ( 用戶 v 對(duì)商品 i 的喜愛程度 r_{vi} )
然后將乘積結(jié)果累加作為 u 對(duì) i 的感興趣程度。
上面的說法可能比較抽象,舉個(gè)極端的例子,假設(shè)和用戶 E 興趣最接近的用戶數(shù) K = 6,那么 S(u,K) 實(shí)際上就是相似度矩陣E所在的行。再假設(shè)要預(yù)估的物品 i=5,則 N( i=5 ) = {B, D},于是有 v = {B, D} 。于是有:
p(u=E,i=5)=wEBrB5+wEDrD5=0p(u=E,i=5) = w_{EB}r_{B5} + w_{ED}r_{D5} = 0 p(u=E,i=5)=wEB?rB5?+wED?rD5?=0
同理可以計(jì)算其他用戶 u 對(duì)某個(gè)物品 i 的感興趣程度。實(shí)際上,對(duì)于上面的這個(gè)極端的例子,不難發(fā)現(xiàn),其數(shù)值就等于 相似度矩陣的第u行 與 評(píng)分矩陣第 i 列 內(nèi)積的結(jié)果:
對(duì)其他的行與列而言,運(yùn)算 相似度矩陣 X 評(píng)分矩陣 可以得到 推薦列表:
| A | 2.9 | 2.2 | 11.0 | 3.9 | 0.8 | 1.2 |
| B | 3.2 | 6.0 | 1.8 | 0 | 4.6 | 0.6 |
| C | 9.1 | 0.8 | 0.9 | 0.2 | 2.0 | 10.2 |
| D | 11.2 | 1.0 | 0.8 | 0.5 | 6.0 | 4.0 |
| E | 0.9 | 2.5 | 11.2 | 3.8 | 0 | 0.5 |
| F | 1.2 | 6.8 | 7.7 | 1.8 | 1.8 | 2.5 |
由于用戶已經(jīng)對(duì)推薦列表中的一些商品有過行為:
所以還要把這些商品給濾除掉,最終得到的推薦表為:
| A | 2.2 | 0.8 | 1.2 | |||
| B | 3.2 | 1.8 | 0 | 0.6 | ||
| C | 0.8 | 0.9 | 0.2 | 2.0 | ||
| D | 1.0 | 0.8 | 0.5 | 4.0 | ||
| E | 0.9 | 2.5 | 0 | 0.5 | ||
| F | 1.2 | 1.8 | 1.8 |
表中數(shù)值越大,表示感興趣程度越高。有了這張推薦表,就可以為每個(gè)用戶推薦 topK 個(gè)感興趣大的、且未曾接觸過的商品。
UserCF 改進(jìn)
對(duì)于一些熱門的商品例如《新華字典》,許多用戶都可能會(huì)有購買行為,但是不能說明買過這本書的興趣就相同。但是都買了相對(duì)冷門點(diǎn)的《統(tǒng)計(jì)學(xué)習(xí)方法》的人,就很可能有相似的興趣。
為了改進(jìn)這個(gè)問題,假設(shè) N(i) 為喜歡物品 i 的用戶數(shù),則可以改用下面的公式計(jì)算相似度:
wuv=∑i∈N(u)∩N(v)1log?(1+∣N(i)∣)∣N(u)∣∣N(v)∣w_{uv} = \frac{\sum_{i\in{N(u)\cap N(v)}} \frac{1}{\log(1+|N(i)|)}}{\sqrt{|N(u)||N(v)|}} wuv?=∣N(u)∣∣N(v)∣?∑i∈N(u)∩N(v)?log(1+∣N(i)∣)1??
上面的式子中 1log?(1+∣N(i)∣)\frac{1}{\log(1+|N(i)|)}log(1+∣N(i)∣)1? 懲罰了用戶 u 和用戶 v 共同興趣列表中熱門物品對(duì)他們相似度的影響。
二、基于物品的協(xié)同過濾算法(ItemCF)
基于物品的協(xié)同過濾算法(ItemCF)給用戶推薦那些和他們之前喜歡的物品相似的物品,該算法不利用物品內(nèi)容屬性計(jì)算物品之間的相似度,而是通過分析用戶的行為記錄計(jì)算物品之間的相似度。
**基本思想:物品A和物品B具有很大的相似度是因?yàn)橄矚g物品A的用戶大都也喜歡物品B。**比如給用戶推薦《天龍八部》的解釋可以是因?yàn)橛脩糁跋矚g《射雕英雄傳》。
主要步驟如下:
1,物品相似度計(jì)算
設(shè) N( i ) 為喜歡物品 i 的用戶數(shù), N( j ) 為喜歡物品 j 的用戶數(shù), i 和 j 的相似度可以通過下面的式子計(jì)算:
wij=∣N(i)∩N(j)∣∣N(i)∣∣N(j)∣w_{ij} = \frac{|N(i)\cap N(j)|}{\sqrt{|N(i)||N(j)|}} wij?=∣N(i)∣∣N(j)∣?∣N(i)∩N(j)∣?
兩個(gè)物品產(chǎn)生相似度是因?yàn)樗鼈児餐缓芏嘤脩粝矚g,也就是說每個(gè)用戶都可以通過他們的歷史興趣列表給物品“貢獻(xiàn)”相似度。所有物品之間的計(jì)算結(jié)果構(gòu)成物品相似度矩陣。
2,推薦列表計(jì)算
計(jì)算用戶 u 對(duì)物品 i 的興趣程度:
p(u,i)=∑j∈S(i,K)∩N(u)wijrujp(u,i) = \sum_{j\in{S(i,K)\cap N(u)}} w_{ij}r_{uj} p(u,i)=j∈S(i,K)∩N(u)∑?wij?ruj?
S(i, K) 為和物品 i 最相似的 K 個(gè)物品, N(u) 為用戶 u 喜歡的物品集合,wijw_{ij}wij? 為物品 i 和物品 j 的相似度, rujr_{uj}ruj?為用戶 u 對(duì)物品 j 的興趣。
簡(jiǎn)單來說,就是把曾經(jīng)感興趣的所有K個(gè) (與目標(biāo)物品 i 相似的物品 j 的感興趣程度 rujr_{uj}ruj? )與 ( i 和 j 的相似程度wijw_{ij}wij? ) 相乘, 然后將乘積的結(jié)果求和作為新物品 i 的感興趣程度,步驟如下:
j∈S(i,K)∩N(u)j\in{S(i,K)\cap N(u)}j∈S(i,K)∩N(u) 意味著從 用戶曾經(jīng)喜歡過的物品中 篩選出 恰好與目標(biāo)物品 i 比較相近 的物品作為 j 。
對(duì)于每一個(gè)篩選到的 j 計(jì)算:
( 目標(biāo)物品 i 和 曾經(jīng)感興趣的物品 j 相似度 wijw_{ij}wij? ) * ( 用戶對(duì)曾經(jīng)感興趣的物品 j 的評(píng)價(jià)rujr_{uj}ruj? )
將所有 j 在第二步的計(jì)算結(jié)果累加起來,作為對(duì)物品 i 的感興趣程度
這個(gè)公式的理解是:和用戶歷史上感興趣的物品越相似的物品,越有可能在用戶的推薦列表中獲得比較高的排名。
當(dāng)然也可以按照前文 UserCF 的理解方式,將 物品相似度矩陣 X 評(píng)分矩陣 進(jìn)而得到 推薦列表,在此不再贅述。
ItemCF 改進(jìn)
由于活躍用戶可能會(huì)廣泛的購買各種類別商品,因此對(duì)物品相似度的貢獻(xiàn)要小于不活躍用戶。本節(jié)計(jì)算相似度的方法同樣可以改用下面的方法:
wij=∑u∈N(i)?N(j)1log?1+∣N(u)∣∣N(i)∣∣N(j)∣w_{ij} = \frac{\sum_{u \in N(i) \bigcap N(j)}\frac{1}{\log{1}+|N(u)|}}{\sqrt{|N(i)||N(j)|}} wij?=∣N(i)∣∣N(j)∣?∑u∈N(i)?N(j)?log1+∣N(u)∣1??
這個(gè)公式只是對(duì)活躍用戶做的一種軟性懲罰,但對(duì)于很多過于活躍的用戶,在實(shí)際計(jì)算中一般直接忽略他的興趣列表,而不將其納入到相似度計(jì)算的數(shù)據(jù)集中。
歸一化
如果將 ItemCF 的相似度矩陣按最大值歸一化,可以提高推薦的準(zhǔn)確率。如果已經(jīng)得到了物品相似度矩陣 w ,那么可以用如下公式得到歸一化之后的相似度矩陣 w’ :
wij′=wijmax?iwijw_{ij}' = \frac{w_{ij}}{\max\limits_i w_{ij}} wij′?=imax?wij?wij??
歸一化的好處不僅僅在于增加推薦的準(zhǔn)確度,它還可以提高推薦的覆蓋率和多樣性。
三、UserCF 與 ItemCF 對(duì)比
UserCF 給用戶推薦那些和他有共同興趣愛好的用戶喜歡的物品,而 ItemCF 給用戶推薦那些和他之前喜歡的物品類似的物品。就具體應(yīng)用來說,UserCF 曾被 GroupLens 用來實(shí)現(xiàn)新聞的個(gè)性化推薦, ItemCF 則是亞馬遜、Netflix 用于做商品、視頻推薦。
為何新聞推薦用 UserCF ?
從個(gè)性化與時(shí)效性角度來看,在新聞網(wǎng)站中,人們傾向于點(diǎn)擊熱門的新聞。因此推薦的新聞強(qiáng)調(diào)抓住熱點(diǎn),個(gè)性化的需求次之。UserCF 可以給用戶推薦和他有相似愛好的一群其他用戶今天都在看的新聞,這樣在抓住熱點(diǎn)和時(shí)效性的同時(shí),保證了一定程度的個(gè)性化。
從技術(shù)角度來看,新聞的更新非常快,而 ItemCF 需要維護(hù)一張物品(新聞)相關(guān)度的表,如果物品更新很快,那么這張表也需要很快更新,這在技術(shù)上很難實(shí)現(xiàn)。而 UserCF 只需要維護(hù)用戶相似性表,且更新速度相對(duì)物品來說緩慢的多。
為何商品和視頻推薦用 ItemCF?
在這些購物與視頻網(wǎng)站中,用戶的興趣是相對(duì)固定和持久的。個(gè)性化推薦的任務(wù)是幫助用戶發(fā)現(xiàn)和他研究領(lǐng)域相關(guān)的物品,而不需要過多考慮這個(gè)物品是否熱門。
從技術(shù)角度來看,這些網(wǎng)站的物品更新速度不會(huì)特別快,一天一次更新物品相似度矩陣對(duì)它們來說不會(huì)造成太大的損失,是可以接受的。
UserCF 、ItemCF 優(yōu)缺點(diǎn)的對(duì)比
下圖總結(jié)了UserCF和ItemCF優(yōu)缺點(diǎn)的對(duì)比:
參考文章:
《推薦系統(tǒng)實(shí)戰(zhàn)》項(xiàng)亮
推薦系統(tǒng)實(shí)戰(zhàn)筆記(一)
推薦系統(tǒng)UserCF和ItemCF
《推薦系統(tǒng)實(shí)踐》筆記
總結(jié)
以上是生活随笔為你收集整理的【推荐系统(一)】协同过滤之基于领域的方法(UserCF,ItemCF)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔兽世界怀旧服洛克莫丹矿点在哪?最全洛克
- 下一篇: 【推荐系统(二)】协同过滤之隐语义模型(