簡介
推薦系統產生推薦列表的方式通常有兩種:協同過濾以及基於內容推薦,或者基於個性化推薦。協同過濾方法根據用戶歷史行為(例如其購買的、選擇的、評價過的物品等)結合其他用戶的相似決策建立模型。這種模型可用於預測用戶對哪些物品可能感興趣(或用戶對物品的感興趣程度)。基於內容推薦利用一些列有關物品的離散特征,推薦出具有類似性質的相似物品。而本文使用協同過濾的方法來構建整個推薦系統。
推薦方式
-
根據流行程度
**優點**:能夠給使用者推薦一些東西,了解到最新流行動向。 **缺點**:沒有代表性,因為這僅僅是該平台的數據集合。推薦的並不符合個性化的需求。
-
根據個人特征
通過用戶信息和商品特征給出推薦。但這往往也有很多問題:用戶信息不完善,商品信息不全,給分類的方式帶來很大不確定性。
-
根據協同過濾
這也是今天的主角。首先說說什么是協同過濾:**通過其他人的個人特征,商品的特征,用戶和商品的一般化關聯關系給用戶推薦相應的產品。**舉個例子:比如你買了一個手機,那么該平台看看和你相似買了手機的用戶都會買哪些東西,然后給你進行推薦。
實現步驟
step 1:
需要根據用戶購買的東西和商品對應建一個矩陣:(列為商品,橫為用戶)
問題:一個人可能會購買多件商品這樣會產生計算誤差。
這時需要對矩陣進行規范化處理(將數據按比例縮放,使之落入一個小的特定區間),引入Jaccard相似性系數:
step 2:
將購物歷史加入其中,進行權重的計算。假如一名用戶買了牛奶和尿布,那么他買濕巾的可能:
最后將加權平均分排序后,即可按排序進行推薦。
step 3:
現象:對一些產品來說,用戶可能喜歡,但是他用購買記錄沒辦法得到推薦。
解決方案: 首先拿已經評價過的商品和用戶對應構成如下矩陣(列為商品,橫為用戶),黑塊是已經進行評價的,而白塊是評價過的,那么將白塊變成黑塊便是我們下面要做的。
為了計算白塊,我們為商品和用戶建立向量。而向量里有一系列關於商品和用戶特征取值。如一用戶喜歡計算機那么他的計算機屬性值就較高。而每個商品也具有計算機的屬性值並賦值。
Lu = [ 0.3 0.6 1.6 ... ] --用戶取值
Ru = [ 0.6 0.8 4.2 ... ] --商品取值
再對Lu和Ru取點乘,便能取得用戶和商品的相關性。以這樣的思路我們便能建立起矩陣因子分解模型(L為用戶集合,R為商品的集合,集合的每項便為特征取值):
通過得到模型與商品評價矩陣Rating進行殘差平方和來判斷模型的好壞。這種預測也僅僅是數據層面上的,下面介紹具體判斷模型好壞的參數:召回率和精准度。