推荐系统--基于用户的协同过滤算法
1.?????????概述
和搜索引擎一樣,推薦系統是為了幫助人們更快速的獲得對自己有用的信息。
和搜索引擎不同,推薦系統是人們被動的獲取,由系統根據用戶行為或其他的信息推薦給用戶的,兒搜索引擎是用戶主動輸入關鍵字獲取的。
從某種意義上說,搜索引擎和推薦系統是互相補充的。
而推薦算法的本質是通過一定的方式將用戶和物品聯系起來,從而有效的給用戶推薦本身感興趣或需要但是沒有發現的物品。
個性化推薦系統的應用場景:電子商務(據說Amazon 35%的銷售額來自推薦系統)、電影和視頻網站、個性化音樂網絡電臺、社交網絡、個性化閱讀、基于位置的服務、個性化郵件、個性化廣告(上下文廣告、搜索廣告、個性化展示廣告)。
?
???????? 一個推薦系統的評判標準:用戶滿意度、預測準確度、覆蓋率、多樣性、新穎性、驚喜度、信任度、實時性、健壯性、商業目標。
2. ? ? ? ?主要推薦系統算法
基于鄰域的方法、隱語義模型、基于圖的隨機游走算法。在這些方法中,最著名、在業界得到最廣泛應用的算法是基于鄰域的方法。
基于鄰域的方法主要包括:基于用戶的協同過濾算法(給用戶推薦和他興趣相似的其他用戶喜歡的物品)和基于物品的協同過濾算法(給用戶推薦和該用戶喜歡的物品屬性類似的其他物品)
下面主要說明一下第一種算法
基于用戶的協同過濾算法
該算法的主要步驟:1、找到與該用戶興趣相似的用戶集;2、找到這個集合中的用戶喜歡的但是沒有聽說過的物品推薦給目標用戶。
第一步:計算用戶的興趣相似度
可以通過以下公式計算:
其中u,v表示兩個用戶,N(u)表示用戶u曾經有過正反饋的物品集合;N(v)表示用戶v曾經有過正反饋的物品集合。
算法的Python實現如下:
def User_Similarity(train):W=dict()for u in train.keys():for v in train.keys():if u == v: continue; W[u][v] = len(train[u],train[v])W[u][v] /= math.sqrt(len(train[u]) * len(train[v]) * 1.0)
可以發現該代碼的時間復雜度是O(n*n),并且大多數用戶的興趣相似度可能位0,即|N(u)∩N(v)| = 0,所以該代碼還是可以優化的。
我們可以先計算出|N(u)∩N(v)| ≠ 0的用戶對(u,v)然后除以余弦相似度。這里可以使用倒排,將數據排列成物品到用戶的倒排表,物品后鏈接的是與對該物品感興趣的用戶鏈表,然后循環統計每個物品用戶鏈表的用戶相似度即可。
算法的Python代碼如下:
#!/usr/bin/env python # coding=utf-8 def UserSimilarity(train):#建立倒排表item_users = dict()for u,items in train.items():for i in item.keys():if i not in item_users:items_users[i] = set()item_users[i].add(u)#item_users即為物品到用戶的倒排表#計算用戶之間的相關度C = dict()#任意用戶之間的相關度N = dict()#用戶正反饋物品的數目for i ,users in item_users:for u in users:N[u] += 1for v in users:if u == v:continue:C[u][v] += 1#最后計算結果矩陣W = dict()for u ,related_users in C.items():for v,cuv in related_users:W[u][v] = cuv / math.sqrt(N[u]* N[v]*1.0) return W
?
?
物品-用戶倒排表
第二步:推薦和他相似的K個用戶喜歡的物品
其中:p(u,i)用戶u對物品i的興趣度;
S(u,K)包含和用戶u興趣最相近的K的用戶;
Wuv用戶u和用戶v的興趣相似度;
Rvi用戶v對物品i的興趣度;
?
算法的Python代碼實現:
def Recommend(user,train,W):rank = dict()interacted_items = train[user]for v , wuv in sort(W[u].items,key = itemgetter(1),reverse = True)[0:k]:for i ,rvi in train[v].items:if i in interacted_items:continuerank[i] += wuv * rvireturn rank
轉載于:https://my.oschina.net/xinger/blog/265689
總結
以上是生活随笔為你收集整理的推荐系统--基于用户的协同过滤算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用户软件互评
- 下一篇: 15 个最佳的 jQuery 表格插件