获取用户的浏览记录数组(user_look_list),并将其二值化为长度为good_count+1的数组(user_binaryzation_list)。
遍历所有其他用户的浏览记录,将每个记录也转化为长度为good_count+1的二值数组(look_list_all)。
计算当前用户浏览记录与其他用户浏览记录的相似度(cosine similarity),将相似度最高的用户的浏览记录作为推荐结果。
获取推荐结果中的商品记录(goods_id_set),并返回前5个随机选择的记录(res_list)。
将res_list作为响应数据返回给前端。
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,将user_look_list转化为长度为商品数+1的二值数组(user_binaryzation_list)可以如下实现:
# 假设商品数为n,user_look_list长度为m
user_binaryzation_list = [0] * (n + 1) # 初始化长度为n+1的全零列表(多一个位置用来存储用户ID或者其他标识符)
user_binaryzation_list[0] = user_id # 第一个位置存储用户ID或其他标识符
for goods_id in user_look_list:
if goods_id <= n and goods_id >= 1:
user_binaryzation_list[goods_id] = 1 # 将二值数组中对应商品的位置设置为1
接着,遍历所有其他用户的浏览记录,同样将其转化为长度为商品数+1的二值数组(look_list_all)可以如下实现:
# 假设所有用户的浏览记录存储在列表all_look_list中,每个用户的浏览记录都是长度为m的列表
look_list_all = []
for look_list in all_look_list:
binaryzation_list = [0] * (n + 1) # 初始化长度为n+1的全零列表
binaryzation_list[0] = user_id # 第一个位置存储用户ID或其他标识符
for goods_id in look_list:
if goods_id <= n and goods_id >= 1:
binaryzation_list[goods_id] = 1 # 将二值数组中对应商品的位置设置为1
look_list_all.append(binaryzation_list) # 将该用户的二值数组添加到look_list_all中
接下来,计算当前用户与其他用户的浏览记录的相似度(cosine similarity),并选出相似度最高的用户的浏览记录作为推荐结果。可以如下实现:
import numpy as np
# 假设当前用户的二值数组为user_binaryzation_list,其他用户的二值数组存储在look_list_all中
similarity_list = [] # 存储当前用户与其他用户的相似度
user_vector = np.array(user_binaryzation_list[1:]) # 用户向量,去掉用户ID
for look_list in look_list_all:
goods_vector = np.array(look_list[1:]) # 商品向量,去掉用户ID
similarity = np.dot(user_vector, goods_vector) / (np.linalg.norm(user_vector) * np.linalg.norm(goods_vector)) # 计算余弦相似度
similarity_list.append(similarity)
max_index = np.argmax(similarity_list) # 获取相似度最高的用户的索引
recommendation = look_list_all[max_index] # 推荐结果为相似度最高的用户的浏览记录
最后,获取推荐结果中的商品记录(goods_id_set),并随机选择前5个记录(res_list)作为响应数据返回给前端可以如下实现:
import random
goods_id_set = set()
for i in range(1, n+1):
if recommendation[i] == 1:
goods_id_set.add(i)
res_list = random.sample(list(goods_id_set), min(5, len(goods_id_set))) # 随机选择前5个记录