推荐算法

校园闲置推荐算法

构建推荐模型

$$
F(Y|X)
$$

F:为商品算分决定推荐商品的排序

Y:为推测用户的行为,例如:点击商品详情页

X:商品特征(标签,地区,价格,用户点击次数),用户特征(兴趣,搜索历史,我想要)

商品特征

  1. 标签

用户发表闲置商品时,选择商品标签并保存在数据库表中

  1. 地区

按照发布地区与用户地区的距离对商品的推荐指数进行算分

用户特征

  1. 兴趣

在用户新登录软件时,增加用户选择兴趣的环节,为用户打上标签,推荐和用户相同兴趣的商品

  1. 搜索关键字

记录用户的搜索记录,增加用户兴趣的权重,如果用户在一开始并未选择兴趣,则加入用户特征

  1. 我想要

用户发布我想要的帖子,增加标签选项,和用户输入的商品关键字,按“我想要”关键字着重推送

商品关键字可以包括:低价,耳机,手表,距离近

涉及算法

决策树

image-20231107170303477

神经网络

基于协同的推荐算法

基于协同过滤的推荐算法( Collaborative Filtering Recommendation)技术是推荐系统中应用最早和最为成功的技术之一。它一般采用最近邻技术,利用用户的历史喜好信息计算用户之间的距离,然后利用目标用户的最近邻居用户对商品评价的加权评价值来预测目标用户对特定商品的喜好程度,从而根据这一喜好程度来对目标用户进行推荐。

image-20231107200956623

image-20231123184144062

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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},
"4":{"联想":0.1,"魅族":0.3,"一加":5.0},
"5":{"诺基亚":2.0,'oppe':5.0,"htc":0.2},

}

#| 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"))

基于特征的推荐算法

image-20231107201025304