協同過濾(collaborative filtering)是推薦系統最爲常用的算法之一,已被很多知名網站如Amazon.com、TiVo、Netflix等成功應用在自己的推薦系統中。
協同過濾推薦系統的算法可以分爲兩類:基於記憶(memory-based)的和基於模型(model-based)的算法。其中基於記憶
的算法最主要有基於用戶鄰域的協同過濾和基於物品鄰域的協同過濾。
一、基於用戶鄰域的協同過濾
基於用戶鄰域的協同過濾算法給用戶推薦和該用戶興趣相似的其他用戶喜歡的物品。具體的推薦過程爲:我要給你推薦物品,首先找到和你興趣最相似的K個用戶,然後在他們喜歡但你還沒有產生行爲的物品中挑選你可能最感興趣的N個物品推薦給你。
要實現上面的推薦過程,我們要做好兩件事。一是準確找到和一個特定用戶興趣最相似的K個用戶;二是在衆多可能感興趣的物品集合中選出最感興趣的N個物品。
爲了做好上面的兩件事,基於用戶鄰域的協同過濾引進了下面兩個概念:
一、用戶興趣相似度。這是一個數,用於度量兩個用戶興趣相似的程度。關於此概念的具體含義和計算方法見。
二、用戶對物品的興趣度。這也是一個數,用於度量一個用戶對一個物品的感興趣程度。關於此概念的具體含義和計算方法見。
二、基於物品鄰域的協同過濾
基於物品鄰域的協同過濾算法給用戶推薦和該用戶產生過行爲的物品內容相似的其他物品。具體的推薦過程爲:我要給你推薦物品,首選找到和你產生過行爲的每個物品內容最相似的K個物品,然後在這些相似物品中挑選你可能最感興趣的N個物品推薦給你。
要實現上面的推薦過程,我們要做好兩件事。一是準確找到和一個特定物品內容最相似的K個物品;二是在衆多相似物品集合中挑選出最感興趣的N個物品。
爲了做好上面的兩件事,基於物品鄰域的協同過濾引進了下面兩個概念:
一、物品內容相似度。這是一個數,用於度量兩個物品內容相似的程度。關於此概念的具體含義和計算方法見。
二、用戶對物品的興趣度。這也是一個數,用於度量一個用戶對一個物品的感興趣程度。關於此概念的具體含義和計算方法見。
三、基於用戶和物品的協同過濾對比。
基於用戶鄰域的協同過濾算法早於基於物品鄰域的協同過濾算法被提出,但出於種種原因,後者比前者更廣泛的應用在真實的推薦系統中,主要有如下因素:
一、基於物品鄰域的協同過濾比基於用戶鄰域的協同過濾具有更好的解釋性。基於物品鄰域的協同過濾給用戶推薦物品的時候,系統給出的推薦理由可以是用戶以前對某某物品產生過行爲,這很容易被用戶所接受。但基於用戶鄰域的協同過濾給用戶推薦物品的時候,系統不能將因爲你和某某用戶興趣相似作爲物品的推薦理由,因爲用戶絕大情況下是不知道那個用戶的,這顯然無法被用戶所接受。
二、基於物品鄰域的協同過濾比基於用戶鄰域的協同過濾具有反饋更及時的好處。當一個新用戶或者一個老用戶對一個物品產生行爲後,基於物品鄰域的協同過濾可以在不重新訓練的情況下給用戶推薦和剛產生行爲的物品相似的物品,但基於用戶鄰域的協同過濾很難做到這一點。
本人蔘考Python Surprise庫,用Python實現了推薦系統常用的算法,GitHub地址:https://github.com/liuchenailq/lcrs