协同过滤推荐
1.启发式推荐算法(Memory-based algorithms)
启发式推荐算法易于实现,并且推荐结果的可解释性强。启发式推荐算法又可以分为两类:
基于用户的协同过滤(User-based collaborative filtering):主要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。举个例子,李老师和闫老师拥有相似的电影喜好,当新电影上映后,李老师对其表示喜欢,那么就能将这部电影推荐给闫老师。
基于物品的协同过滤(Item-based collaborative filtering):主要考虑的是物品和物品之间的相似度,只有找到了目标用户对某些物品的评分,那么就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户。举个例子,如果用户A、B、C给书籍X,Y的评分都是5分,当用户D想要买Y书籍的时候,系统会为他推荐X书籍,因为基于用户A、B、C的评分,系统会认为喜欢Y书籍的人在很大程度上会喜欢X书籍。
2.基于模型的推荐算法(Model-based algorithms)
基于模型的推荐算法利用矩阵分解,有效的缓解了数据稀疏性的问题。矩阵分解是一种降低维度的方法,对特征进行提取,提高推荐准确度。基于模型的方法包括决策树、基于规则的模型、贝叶斯方法和潜在因素模型。
推荐框架:tensorflow,pytorch
1.帮助用户快速找到想要的商品,提高用户对网站的忠诚度;
2.提高网站交叉销售能力、成交转化率;
首先,找到User1 喜欢的商品;
找出与User1具有相同的商品兴趣爱好的人群;
找出该人群喜欢的其他商品;
将这些商品推送给User1。
import math # 计算两点之间的距离 def eucliDist(A,B): return math.sqrt(sum([(a - b)**2 for (a,b) in zip(A,B)])) X = [1,2,3,4] Y = [0,1,2,3] print(eucliDist(X,Y))
data = { "1":{"诺基亚":4.8,'iphone':5.0,"联想":0.1}, "2":{"诺基亚":3.0,"vivo":5.0,"htc":0.2}, "3":{"锤子":0.1,"魅族":0.3,"一加":5.0} } #| x | = √(x[1]2 + x[2]2 + … + x[n]2) from math import * #pow返回 xy(x的y次方) 的值 #sqrt返回数字x的平方根 #计算用户之间的相似度 def Euclid(user1,user2): #根据key获取value user1_data = data[user1] user2_data = data[user2] distance = 0 for key in user1_data.keys(): if key in user2_data.keys(): distance += pow(float(user1_data[key]) - float(user2_data[key]),2) #变成小数便于比较,值越小相似度越高 return 1/(1+sqrt(distance)) print(Euclid("1","2")) #构建最相似的用户top_people def top_user(user): res = [] for uid in data.keys(): if not uid == user: simliar = Euclid(user,uid) res.append((uid,simliar)) res.sort(key=lambda val:val[1]) return res print(top_user('1')) #构建推荐商品 def recommend(user): top_people = top_user(user)[0][0] #获取当前相似度最高的用户的商品列表 items = data[top_people] recommed_list = [] for item in items.keys(): #当这个商品不存在于目标用户的商品列表中,添加到推荐列表中 if item not in data[user].keys(): recommed_list.append((item,items[item])) #根据推荐列表里的打分请款从小到大排序,然后反转 recommed_list.sort(key=lambda val:val[1],reverse=True) #取出top10推荐 return recommed_list[:10] print(recommend("1"))