三分鐘了解協(xié)同過濾算法

1 評論 22038 瀏覽 66 收藏 8 分鐘

計算用戶/物品相似度,以相似度作為權(quán)重,對不同物品進(jìn)行評分預(yù)測,從而實現(xiàn)物品。

什么是協(xié)同過濾

先舉個生活中的場景,你想聽歌卻不知道聽什么的時候,會向你身邊與你品位類似的朋友求助,從而獲得他的推薦。協(xié)同過濾(Collaborative Filtering,簡稱CF)就像與你品味相近的朋友,通過對大量結(jié)構(gòu)化數(shù)據(jù)進(jìn)行計算,找出與你相似的其他用戶(user)或與你喜歡的物品(item)相似的物品,從而實現(xiàn)物品推薦。

協(xié)同過濾分為兩類:基于用戶的協(xié)同過濾(User-Based CF)和基于物品的協(xié)同過濾(Item-Based CF)。結(jié)合前文的介紹便不難理解分別的應(yīng)用場景。

計算相似度之前需要先準(zhǔn)備一些如下表所示的數(shù)據(jù)集:

它是一種表達(dá)不同人對不同物品偏好的方式,例如音樂應(yīng)用可以用0和1表示喜歡不喜歡和喜歡。

User-Based CF

如果你和小明對于音樂的品位相似,假如小明喜歡聽Adele,那么你也有可能喜歡聽。好了,問題來了:

  • 如何衡量兩個用戶是否相似?
  • 如何根據(jù)相似用戶推薦物品?

相似度計算

相似度通過如下公式計算得到:

y = f(data, user1, user2)

其中,data就是前文提到的數(shù)據(jù)集,user1和user2表示要比較的兩個用戶或物品。書中主要介紹了兩種相似度計算函數(shù):歐幾里得距離評價、皮爾遜相關(guān)度評價。

(1)歐幾里得距離

它以經(jīng)過人們一致評價的物品為坐標(biāo)軸,然后將參與評價的人繪制到圖上,并考察他們彼此間的距離遠(yuǎn)近。輸出滿足y∈[0,1],1表示user1和user2具有相同的偏好,0表示user1和user2偏好不同。

(2)皮爾遜相關(guān)度

它是比歐幾里得距離更復(fù)雜的一種表示相似度的方法。用于判斷兩組數(shù)據(jù)與某一直線擬合程度,在數(shù)據(jù)不是很規(guī)范的時候(比如,影評者對影片的評價總是相對于平均水平偏離很大時),會傾向于給出更好的結(jié)果。皮爾遜可以簡單理解為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)及格,對于這兩個函數(shù)理解的也不深,所以沒辦法深入淺出的解釋,不過只要知道每種計算方法的適應(yīng)范圍和局限性就好了。

推薦物品

第一個問題解決了,來看看如何推薦物品。如果只是把相似用戶喜歡的物品推薦給被推薦者,未免過于草率,而且又該如何選擇相似用戶呢。

(1)推薦算法

結(jié)合前文數(shù)據(jù)集進(jìn)行說明:

  • 計算出所有用戶兩兩之間的相似度;
  • 指定一個被推薦者:小明;
  • 找出其他用戶評價過且被推薦者未評價的物品:春風(fēng)吹;
  • 以被推薦者與他人的相似度作為權(quán),將權(quán)與其他用戶對該物品的評分相乘;
  • 【x春風(fēng)吹】一列值之和除以相似度一列值之和,最終結(jié)果(2.875)便為預(yù)測的小明對于春風(fēng)吹的評分。

注:相似度隨便寫的,并非計算所得。

至此可以給出推薦算法公式:

y = f(data, user, sim)

其中,data就是前文提到的數(shù)據(jù)集,user為被推薦者,sim為相似度計算函數(shù),可以根據(jù)場景不同選擇不同的計算函數(shù)。從輸出總選擇評分較高的物品推薦給用戶,從而實現(xiàn)物品推薦。

Item-Based CF

基于物品的推薦思路是:根據(jù)你評價過的物品,找出與其相似的物品。

相似度計算

方法與User CF相同,只是我們需要把前文數(shù)據(jù)集進(jìn)行轉(zhuǎn)置,并計算所有物品兩兩之間的相似度。

推薦物品

如同User CF,我們不能簡單的推薦與我們偏好物品類似的物品。

(1)推薦算法

  • 計算出所有物品兩兩之間的相似度;
  • 指定一個被推薦者;
  • 找出被推薦者評價過的物品;
  • 以被推薦者評價過的物品與其他物品的相似度作為權(quán),將權(quán)與被推薦者對該物品的評分相乘;
  • 【xXX】一列值之和除以相似度一列值之和,最終結(jié)果便為預(yù)測的被推薦者對于其未評價過物品的評分。

注:相似度隨便寫的,并非計算所得;并且根據(jù)說明需要增加了一些音樂。

至此可以給出推薦算法公式:

y = f(data, itemMatch, user)

其中,data就是前文提到的數(shù)據(jù)集,user為被推薦者,itemMatch為所有物品兩兩之間相似度的數(shù)據(jù)集,計算itemMatch時,可以根據(jù)場景不同選擇不同的計算函數(shù)。從輸出總選擇評分較高的物品推薦給用戶,從而實現(xiàn)基于物品的物品推薦。

如何選擇?

1. 基于物品進(jìn)行過濾的方式要過于基于用戶的方式,不過它需要維護(hù)物品相似度表的額外開銷,這也是它快的原因;

2. 對于稀疏數(shù)據(jù)集,Item-Based CF效果優(yōu)于User-Based CF;

3. 對于密集數(shù)據(jù)集,兩者效果幾乎相同;

4. 最重要的是,結(jié)合應(yīng)用場景選擇合適的方法。

一句話心得

我對于協(xié)同過濾的理解是:

計算用戶/物品相似度,以相似度作為權(quán)重,對不同物品進(jìn)行評分預(yù)測,從而實現(xiàn)物品。

 

本文由 @會編程的狗 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash,基于 CC0 協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!