使用者協同推薦算法思想
如果你喜歡蘋果、香蕉、芒果等物品,另外有個人也喜歡這些物品,而且他還喜歡西瓜,則很有可能你也喜歡西瓜這個物品。
是以說,當一個使用者 A 需要個性化推薦時,可以先找到和他興趣相似的使用者群體 G,然後把 G 喜歡的、并且 A 沒有聽說過的物品推薦給 A,這就是基于使用者的系統過濾算法。
根據上述基本原理,我們可以将基于使用者的協同過濾推薦算法拆分為兩個步驟:
1. 找到與目标使用者興趣相似的使用者集合
2. 找到這個集合中使用者喜歡的、并且目标使用者沒有聽說過的物品推薦給目标使用者
1. 發現興趣相似的使用者
通常用 Jaccard 公式或者餘弦相似度計算兩個使用者之間的相似度。設 N(u) 為使用者 u 喜歡的物品集合,N(v) 為使用者 v 喜歡的物品集合,那麼 u 和 v 的相似度是多少呢:
Jaccard 公式:
餘弦相似度:
假設目前共有4個使用者: A、B、C、D;共有5個物品:a、b、c、d、e。使用者與物品的關系(使用者喜歡物品)如下圖所示:
如何一下子計算所有使用者之間的相似度呢?為計算友善,通常首先需要建立“物品—使用者”的倒排表,如下圖所示:
然後對于每個物品,喜歡他的使用者,兩兩之間相同物品加1。例如喜歡物品 a 的使用者有 A 和 B,那麼在矩陣中他們兩兩加1。如下圖所示:
計算使用者兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以餘弦相似度為例,對上圖進行進一步計算:
到此,計算使用者相似度就大功告成,可以很直覺的找到與目标使用者興趣較相似的使用者。
2. 推薦物品
首先需要從矩陣中找出與目标使用者 u 最相似的 K 個使用者,用集合 S(u, K) 表示,将 S 中使用者喜歡的物品全部提取出來,并去除 u 已經喜歡的物品。對于每個候選物品 i ,使用者 u 對它感興趣的程度用如下公式計算:
其中 rvi 表示使用者 v 對 i 的喜歡程度,在本例中都是為 1,在一些需要使用者給予評分的推薦系統中,則要代入使用者評分。
舉個例子,假設我們要給 A 推薦物品,選取 K = 3 個相似使用者,相似使用者則是:B、C、D,那麼他們喜歡過并且 A 沒有喜歡過的物品有:c、e,那麼分别計算 p(A, c) 和 p(A, e):
看樣子使用者 A 對 c 和 e 的喜歡程度可能是一樣的,在真實的推薦系統中,隻要按得分排序,取前幾個物品就可以了
springboot+html商城版本源碼
springboot+vue(elementui)商城版本源碼
springboot+uniapp城版本源碼
springboot+小程式版本源碼
springboot+安卓版本源碼
springcloud和上面任意版本組合