基于用戶的協(xié)同過濾,UserCF算法

大家好,今天我們要討論的主題是,基于用戶的協(xié)同過濾,UserCF算法。
希望這篇文章,能幫助大家,理解協(xié)同過濾、相似度計(jì)算、推薦算法的工作原理等知識點(diǎn)。

UserCF的全稱是User-Based Collaborative Filter,使用了樸素的“人以群分”的思想。

該算法的原理是先“找到相似同戶”,再“找到他們喜歡的物品”。例如,用戶A和用戶B是相似的,我們現(xiàn)在要給用戶A推薦一些他之前沒有關(guān)注的商品。那么這時(shí)就可以將B關(guān)注了,但A沒有關(guān)注的物品,也就是可樂,推薦給A。
簡單來說,基于用戶的協(xié)同過濾,就是給用戶推薦“和他興趣相似的其他用戶”喜歡的物品。
下面來看一個(gè)具體的案例。設(shè)有A、B、C三個(gè)用戶,葡萄、草莓、西瓜、橘子四種水果。如果某個(gè)用戶喜歡某個(gè)水果,就將用戶向水果連一條實(shí)線箭頭。如果要給某個(gè)用戶推薦某個(gè)水果,就從水果向用戶引一條虛線箭頭。

這里會發(fā)現(xiàn),用戶A和用戶C同時(shí)喜歡草莓和西瓜,可以認(rèn)為A和C的喜好是相似的。另外,由于用戶A單獨(dú)喜歡葡萄和橘子,而如果C又沒有吃過這兩種水果,那么就可以將葡萄和橘子推薦給用戶C。
從上面這個(gè)例子中可以看出,UserCF算法主要包含了兩個(gè)重要的步驟:
第1個(gè)步驟是,要找到與待推薦用戶興趣相似的用戶集合。例如,想為用戶C推薦,就要想辦法找出和C相似的其他用戶。
第2個(gè)步驟是,選出這些相似用戶喜歡的,并且目標(biāo)用戶沒有關(guān)注的物品,將它們推薦給目標(biāo)用戶。例如,找出A和C相似后,再找到A關(guān)注且C沒關(guān)注的水果,葡萄和橘子,將它推薦給C。
用戶相似度的計(jì)算
在第1個(gè)步驟中,我們需要計(jì)算兩個(gè)用戶的興趣相似度。對于協(xié)同過濾算法中的相似度計(jì)算,主要會基于用戶的行為相似度,計(jì)算興趣的相似度。
具體來說,用戶的行為是喜歡某些物品,將不同用戶喜歡的物品列表看做是不同的集合。然后通過集合求相似的方法,計(jì)算用戶行為的相似度。

例如,C1和C2代表兩個(gè)用戶喜歡的物品。集合C1包含了圓形、三角形、五邊形,集合C2包含了圓形、方形和五邊形,我們要計(jì)算集合C1和C2的相似度,就是C1和C2兩個(gè)用戶行為的相似度。
集合之間的相似度計(jì)算方法
集合和集合之間的相似度計(jì)算方法,有很多種,比如有Jaccard相似系數(shù)、余弦相似度等等計(jì)算法方法。下面我們分別介紹這兩種計(jì)算方法。

Jaccard相似系數(shù)可以用來比較有限集合之間的相似性與差異性。設(shè)已知兩個(gè)集合A、B,Jaccard 系數(shù)等于A與B交集的大小和A與B并集的大小的比值。
它的取值范圍在0到1之間,越接近1則表示越相似,越接近0則越不相似。其中1代表了兩個(gè)集合完全重合,0代表了兩個(gè)集合之間沒有交集。

例如,有C1和C2兩個(gè)集合。我們要計(jì)算集合C1和C2的相似度。C1包含圓形、三角形、五邊形,C2包含圓形、正方形、五邊形。
觀察C1和C2的交集是2,對應(yīng)圓形和五邊形。并集是4,對應(yīng)圓形、五邊形、方形和三角形,因此Jaccard相似系數(shù)就是2除以(2+1+1)=0.5。

第2種計(jì)算集合相似度的方法會基于余弦相似度計(jì)算。兩個(gè)集合間的Cos相似度的計(jì)算如下,CosA-B等于A和B交集的大小除以,根號下,A集合大小乘B集合大小。它的取值范圍同樣在0到1之間。
例如,如果使用余弦相似度計(jì)算C1和C2的相似度,結(jié)果為2除以根號下3乘3,等于0.667。
用戶興趣相似度的計(jì)算案例
下面來看用戶興趣相似度的計(jì)算案例。設(shè)有4個(gè)用戶,用大寫的A、B、C、D表示,5個(gè)物品用小寫的a、b、c、d、e表示。

每個(gè)用戶對每件物品都有一個(gè)評分,這個(gè)評分代表了用戶對物品的喜好程度,因此會得到一個(gè)4乘5的用戶、物品評分表。
例如,在表格中,用戶A對物品a的評分是3.0,對物品c的評分是橫線,這說明用戶A關(guān)注過物品a,但沒有關(guān)注過物品c。

設(shè)有兩個(gè)用戶,用戶u和用戶v。令N(u)和N(v)分別表示用戶u和v曾經(jīng)有過正向反饋的物品集合,這兩個(gè)集合包含了用戶u和用戶v喜歡的物品。
例如,根據(jù)剛剛的表格,N(A)包含了a、b、d,N(B)包含了a、c、e。我們可以基于Jaccard相似或者余弦相似度,計(jì)算集合A和B的相似度WAB。
結(jié)合用戶物品的評分表,可以求出每個(gè)用戶之間的相似度。這里以用戶C來舉例說明,使用余弦相似度,計(jì)算C和A、B、D的相似度WCA、WCB和WCD。

在計(jì)算C和A的相似度WCA時(shí),它等于N(C)與N(A)的交集數(shù)量,除以根號下,N(C)的元素?cái)?shù)量乘N(A)的元素?cái)?shù)量。
其中N(C)中包含了b和e,N(A)中包含了a、b、d。因此在結(jié)果的分子中,N(C)和N(A)的交集是b,對應(yīng)數(shù)量是1。
結(jié)果的分母是,根號下,兩個(gè)集合的元素?cái)?shù)量相乘,等于根號2乘3等于根號6。所以WCA就等于根號6分之1。
另外C和B與C和D的相似度WCB和WCD,按照同樣的方法,可以得到計(jì)算結(jié)果是根號6分1和根號6分之2。從這個(gè)計(jì)算結(jié)果中可以看出,D用戶與C用戶的相似度最大,為根號6分之2。
UserCF,推薦算法
得到用戶之間的興趣相似度后,我們要繼續(xù)研究如何對某個(gè)用戶進(jìn)行推薦。
UserCF算法會為用戶推薦和他興趣最相似的K個(gè)用戶的感興趣物品。并且會對推薦的物品做一個(gè)排序。

設(shè)p(u, i)度量了某個(gè)用戶u對某個(gè)物品i的感興趣程度。后面要計(jì)算出全部待推薦用戶和待
推薦物品的感興趣程度p。
在計(jì)算p(u, i)的公式中,S(u,K)代表了和用戶u興趣最接近的K個(gè)用戶的集合,N(i)是對物品i有過行為的用戶集合。
v是這兩個(gè)集合的交集中的用戶,v代表了和u最接近且對i有過行為的用戶。wuv是用戶u和用戶v的相似度,rvi是用戶v對物品i的興趣程度,是一個(gè)實(shí)數(shù)。
將wuv和rvi相乘,就代表了,基于用戶v對物品i打分,將全部的用戶v對i的打分累加到一起,就得到了,用戶u對物品i的感興趣程度。
接下來,我們要根據(jù)這個(gè)公式,計(jì)算某個(gè)用戶C的推薦物品列表。

下面我們根據(jù)用戶、物品的評分表,計(jì)算出用戶C的推薦方法。因?yàn)檫@里一共只有4個(gè)用戶,因此令大K等于3,也就是直接根據(jù)另外3個(gè)用戶A、B、D的情況,為用戶C進(jìn)行推薦。

首先,找到C還沒有關(guān)注過的物品,也就是表格中標(biāo)記為橫線的,物品a、c、d。因此公式中的u就是C,i是a、c、d,我們要計(jì)算這三個(gè)物品的推薦順序,也就是P(C,a)、P(C,c)和P(C,d)的大小關(guān)系。

首先計(jì)算用戶C對物品a的興趣程度P(C,a)。其中用戶A和B對該物品有過評價(jià),分別是3.0和4.0。用戶C與用戶A的相似度是WCA,與用戶B的相似度是WCB。這兩個(gè)值在之前已經(jīng)計(jì)算出來了,都是根號6分之1。
所以P(C,a)等于WCA乘3加WCB乘4,等于7除以根號6,等于2.858。同理,可以計(jì)算出P(C,c)和P(C,d)。最后將這三個(gè)值從大到小排序,順序?yàn)閐、a、c,該物品順序就是對用戶C的推薦順序。
那么到這里,基于用戶的協(xié)同過濾,UserCF算法就講完了,感謝大家的觀看,我們下節(jié)課再會。