机器学习项目(五) 电影推荐系统(一) 您所在的位置:网站首页 电影推荐2 机器学习项目(五) 电影推荐系统(一)

机器学习项目(五) 电影推荐系统(一)

2023-07-26 01:43| 来源: 网络整理| 查看: 265

电影推荐系统

1.推荐系统简介 2.电影数据处理 3.简单电影推荐 4.基于内容电影推荐 5.协同过滤 6.总结

一、推荐系统简介 推荐系统的商业应用

推荐系统能找到你喜欢的 帮助你决策 然后发现新的事物 从商家的角度来说 推荐系统可以提供个性化的服务 提高用户的信任度 对推出商品的粘性 进而增加商家的营收

推荐系统就是联系用户和信息之间的关系

一方面帮助用户发现对自己有价值的信息 另一方面可以让信息展现到对其感兴趣的用户面前 从而实现了信息消费者和信息生产者的双赢

个性推荐化系统主要场景

电子商务:淘宝 电影视频推荐 音乐电台推荐:物品种类丰富 音乐种类丰富 物品重用率高 社交网络:抖音 个性化阅读 个性化广告:帮助商家找到可能对其感兴趣的用户 分为:

上下文广告 根据用户正在浏览的相关内容 投放相关的广告搜索广告 通过分析用户在当前会话中搜索的记录 然后判断用户搜索的目的 进行投放 投放和用户目的相关的广告个性化展示的广告 根据用户的兴趣 根据不同的用户 投放不同的广告 长尾理论

长尾理论 将庞大的长尾商品量 * 相当小的单向长尾商品的销售量 获得的收益 比较可观 所以 个性化的推荐也可以带来公司业务的增长

推荐系统的定义

1997年,Resnick和Varian提出:“它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助用户完成购买过程” 推荐系统

三个重要的模块

1.用户建模 2.推荐对象建模模块 3.推荐算法

推荐系统项目的一般流程

流程

二、电影数据处理 数据预处理

内容:特征信息 大小:样本数目(行) 特征数目(列) 质量:缺失值 异常值

import pandas as pd import numpy as np md = pd.read_csv('data/movies_metadata.csv') print(md.head()) md.shape # (45466, 24) 样本数目 特征数目 # 检验数据的安全性 数据规范问题 from ast import literal_eval md['genres'] = md['genres'].fillna('[]').apply(literal_eval).apply(lambda x:[i['name'] for i in x] if isinstance(x, list) else []) md.head() # 查看缺失值情况 md.isnull().any() md.loc[md['imdb_id'].isnull() == True] md['imdb_id'] = md['imdb_id'].fillna('tt0000000') md['imdb_id'].isnull().any() # 查看每列的数值数目 md.count() # 数据可视化 # 分类型简单推荐-不同类型的数目 # 根据不同类型电影观看的人数 判断该类型电影的流行程度 进而可以查看哪些电影是最热门的 genre_set = set() #设置空集合 # 将电影类别名放入集合 for x in md['genres']: for y in range(0,len(x)-1): print(x[y]) genre_set.update(x) genre_set.discard('') #删除''字符 genre_set #对各种电影风格genre,进行one-hot编码 genre_df = pd.DataFrame() # 创建空的数据框 for genre in genre_set: #如果一个值中包含特定内容,则编码为1,否则编码为0 genre_df[genre] = md['genres'].str.contains(genre).map(lambda x:1 if x else 0) md['year'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np.nan else np.nan) genre_df['year']=md['year'] #将genre_df按year分组,计算每组之和。groupby之后,year列通过默认参数as_index=True自动转化为df.index genre_by_year = genre_df.groupby('year').sum() # 进行排序操作 False降序 True升序 genresum_by_year = genre_by_year.sum().sort_values(ascending=False) import matplotlib.pyplot as plt import seaborn as sns #计算每个风格genre的电影总数目,并降序排列,再可视化 fig = plt.figure(figsize=(15,11)) #设置画图框的大小 ax = plt.subplot(1,1,1) #设置框的位置 ax = genresum_by_year.plot.bar() plt.xticks(rotation=60) # x轴的标签 转换60度 plt.title('Film genre by year', fontsize=18) #设置标题的字体大小,标题名 plt.xlabel('count', fontsize=18) #X轴名及轴名大小 plt.ylabel('genre', fontsize=18) #y轴名及轴名大小 plt.show() #可以用查看数据画的图。 #保存图片 fig.savefig('film genre by year.png',dpi=600) #筛选出电影风格TOP8 genre_by_year = genre_by_year[['Drama','Comedy','Thriller','Romance', 'Adventure','Crime', 'Science Fiction', 'Horror']].loc[:,:] year_min = md['year'].min() #最小年份 year_max = md['year'].max() #最大年份 year_min # 电影数目随时间的变化趋势 fig = plt.figure(figsize=(20,20)) ax1 = plt.subplot(1,1,1) plt.plot(genre_by_year) plt.xlabel('Year', fontsize=30) # fontsize 字体大小 plt.ylabel('Film count', fontsize=30) plt.title('Film count by year', fontsize=30) plt.xticks(range(0,150,10)) #横坐标每隔10年一个刻度 #设置表格用什么字体 font = { 'family' : 'SimHei' } import matplotlib matplotlib.rc('font', **font) plt.legend(['Drama(戏剧类)','Comedy(喜剧类)','Thriller(惊悚类)','Romance(浪漫类)', 'Adventure(Adventure)','Crime(犯罪类)', 'Science Fiction(科幻类)', 'Horror(惊恐类)'], loc='best',ncol=2) #设置说明标签 fig.savefig('film count by year.png',dpi=200) # 平均投票数 # 提取用户id 标题title 上映时间year popularity popular_data=pd.DataFrame() popular_data['id']=md['id'] popular_data['title']=md['title'] popular_data['year']=md['year'] popular_data['popularity']=md['popularity'] popular_data.head() # vote_average 平均分 popular_data=pd.DataFrame() popular_data['id']=md['id'] popular_data['title']=md['title'] popular_data['year']=md['year'] popular_data['vote_average']=md['vote_average'] popular_data.head() # 基于平均分 进行排序 降序 popular_data.sort_values(by='vote_average',ascending=False).head(10) 在这里插入代码片

film genre by year film genre by year film count by year film count by year



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有