import pandas as pd
import numpy as np
import pickle
import random
import os
def get_random_movies(PROJECT_ROOT):
title_count, title_set, genres2int, features, targets_values, ratings, users, movies, data, movies_orig, users_orig = pickle.load(open(os.path.join(PROJECT_ROOT,'preprocess.p'), mode='rb'))
random_movies = [random.randint(0,3833) for i in range(5)]
return movies_orig[random_movies]
def get_a_movie(PROJECT_ROOT,movie_id):
title_count, title_set, genres2int, features, targets_values, ratings, users, movies, data, movies_orig, users_orig = pickle.load(open(os.path.join(PROJECT_ROOT,'preprocess.p'), mode='rb'))
#电影ID转下标的字典,数据集中电影ID跟下标不一致,比如第5行的数据电影ID不一定是5
movieid2idx = {val[0]:i for i, val in enumerate(movies.values)}
this_movie_data = movies_orig[movieid2idx[movie_id]]
return this_movie_data
def recommend_same_type_movie(PROJECT_ROOT,movie_id_val, top_k=20):
title_count, title_set, genres2int, features, targets_values, ratings, users, movies, data, movies_orig, users_orig = pickle.load(open(os.path.join(PROJECT_ROOT,'preprocess.p'), mode='rb'))
#电影ID转下标的字典,数据集中电影ID跟下标不一致,比如第5行的数据电影ID不一定是5
movieid2idx = {val[0]:i for i, val in enumerate(movies.values)}
movie_matrics = pickle.load(open(os.path.join(PROJECT_ROOT,'movie_matrics.p'), mode='rb'))
users_matrics = pickle.load(open(os.path.join(PROJECT_ROOT,'users_matrics.p'), mode='rb'))
# 推荐与选择类型同类型的电影
# print("您选择的电影是:{}".format(movies_orig[movieid2idx[movie_id_val]]))
# 规范化电影特征矩阵
norm_movie_matrics = np.sqrt(np.sum(np.square(movie_matrics),axis=1)).reshape(3883,1)
normalized_movie_matrics = movie_matrics/norm_movie_matrics
# 获取所选电影特征向量
probs_embeddings = (movie_matrics[movieid2idx[movie_id_val]]).reshape([1, 200])
probs_embeddings = probs_embeddings/np.sqrt(np.sum(np.square(probs_embeddings)))
# 计算相似度
probs_similarity = np.matmul(probs_embeddings, np.transpose(normalized_movie_matrics))
# print("根据您看的电影类型给您的推荐:")
p = np.squeeze(probs_similarity)
p[np.argsort(p)[:-top_k]] = 0
p = p / np.sum(p)
results = set()
while len(results) != 5:
c = np.random.choice(3883, 1, p=p)[0]
results.add(c)
final_results = [movies_orig[val] for val in results]
return final_results
def recommend_other_favorite_movie(PROJECT_ROOT,movie_id_val, top_k = 20):
title_count, title_set, genres2int, features, targets_values, ratings, users, movies, data, movies_orig, users_orig = pickle.load(open(os.path.join(PROJECT_ROOT,'preprocess.p'), mode='rb'))
#电影ID转下标的字典,数据集中电影ID跟下标不一致,比如第5行的数据电影ID不一定是5
movieid2idx = {val[0]:i for i, val in enumerate(movies.values)}
movie_matrics = pickle.load(open(os.path.join(PROJECT_ROOT,'movie_matrics.p'), mode='rb'))
users_matrics = pickle.load(open(os.path.join(PROJECT_ROOT,'users_matrics.p'), mode='rb'))
# 推荐看过同一个的电影的人喜欢的电影
# print("您看的电影是:{}".format(movies_orig[movieid2idx[movie_id_val]]))
# 根据电影寻找相似的人
probs_movie_embeddings = (movie_matrics[movieid2idx[movie_id_val]]).reshape([1, 200])
probs_movie_embeddings = probs_movie_embeddings/np.sqrt(np.sum(np.square(probs_movie_embeddings)))
norm_users_matrics = np.sqrt(np.sum(np.square(users_matrics),axis=1)).reshape(6040,1)
normalized_users_matrics = users_matrics/norm_users_matrics
probs_user_favorite_similarity = np.matmul(probs_movie_embeddings, np.transpose(normalized_users_matrics))
favorite_user_id = np.argsort(probs_user_favorite_similarity)[0][-top_k:]
# print("喜欢看这个电影的人是:{}".format(users_orig[favorite_user_id-1]))
# 他们喜欢什么样的电影
probs_users_embeddings = (users_matrics[favorite_user_id-1]).reshape([-1, 200])
probs_users_embeddings = probs_users_embeddings/np.sqrt(np.sum(np.square(probs_users_embeddings)))
norm_movie_matrics = np.sqrt(np.sum(np.square(movie_matrics),axis=1)).reshape(3883,1)
normalized_movie_matrics = movie_matrics/norm_movie_matrics
probs_similarity = np.matmul(probs_users_embeddings, np.transpose(normalized_movie_matrics))
p = np.argmax(probs_similarity, 1)
# print("喜欢看这个电影的人还喜欢看:")
results = set()
while len(results) != 5:
c = p[random.randrange(top_k)]
results.add(c)
final_results = [movies_orig[val] for val in results]
return final_results
没有合适的资源?快使用搜索试试~ 我知道了~
基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统-深度学习算法应用(含微信小程序、ipynb工程源码)+数据集

共151个文件
json:26个
js:24个
wxml:22个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉

温馨提示
1.本项目针对MovieLens数据集,基于TensorFlow的2D文本卷积网络模型,使用协同过滤算法计算余弦相似度,通过单击电影的方式与小程序交互,实现两种不同的电影推荐方式。 2.项目运行环境:Python环境、TensorFlow环境、后端服务器、Django和微信小程序环境。 3.项目包括3个模块:模型训练、后端Django、前端微信小程序模块。其中数据预训练部分:通过研究数据集中的字段类型,发现有一些是类别字段,将其转成独热编码,但是UserID、MovieID的字段会变稀疏,输入数据的维度急剧膨胀,所以在预处理数据时将这些字段转成数字;获取特征矩阵部分包括定义函数张量、生成电影特征矩阵、生成用户特征矩阵;后端Django模块实现了推荐算法的封装与前端数据交互功能;前端微信小程序模块实现用户交互以及与后端数据的传输功能,通过微信开发者平台进行前端开发。 4.博客:https://blog.csdn.net/qq_31136513/article/details/133122943
资源推荐
资源详情
资源评论



















收起资源包目录





































































































共 151 条
- 1
- 2
资源评论

- weixin_479644252023-11-20感谢大佬分享的资源,对我启发很大,给了我新的灵感。
- 川大龙纹鲤2023-10-31资源有很好的参考价值,总算找到了自己需要的资源啦。
- m0_568191402023-10-24资源内容详实,描述详尽,解决了我的问题,受益匪浅,学到了。

小胡说人工智能
- 粉丝: 8198
- 资源: 47

下载权益

C知道特权

VIP文章

课程特权

开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
