电影推荐(2)-----基于物品的协同过滤算法&&关联性分析

目录

1.算法的简单图解

2.算法的基本分析过程

3.算法的核心

4.算法的实现

5.关联分析的概念

5.1事务和事务库

5.2项

5.3项集

6.支持度

6.1受欢迎程度

6.2最小支持度

6.3关联条件

7.置信度

8.提升度


1.算法的简单图解

2.算法的基本分析过程

3.算法的核心

上面的全部都是官方的解释和分析,实际上这个基于产品的协同过滤算法就是去分析这个用户的历史喜好,其根据这个历史的分析去推荐和这个用户的喜好产品类似的产品;这个就是这个基于物品的协同过滤算法的核心要义;

4.算法的实现

相关的分析,函数的参数意义说明以及思路,都是以注释的形式写在了代码里面,小伙伴们根据需要自行了解学习哈~~

'''
基于物品的协同过滤算法步骤/思路

1.寻找相似的电影
  #构建数据透视表
  #计算皮尔逊相关系数

2.寻找目标用户感兴趣的电影
  #计算这个求和的结果
  # (用户对于这个电影的评分&&这个电影和用户喜欢的电影的相关系数的乘积)

3.根据推荐规则进行推荐
  #利用函数进行排序,根据索引找到推荐的电影名称
'''

# 导入pandas模块,简称pd
import pandas as pd

'''一、寻找相似的电影'''

# 1. 读取并拼接数据集
ratings = pd.read_csv("/Users/movie/ratings.csv")
movies = pd.read_csv("/Users/movie/movies.csv") 

# 调用merge函数对于这个数据集合进行合并
# 实际上这两个数据集合分别是对于这个电影的评分以及这个电影的相关属性说明
# 相关属性里面包括这个id,名称,编号之类的,让这两个数据表进行合并,方便我们后续的管理
result = pd.merge(ratings, movies) 

# 2. 构建数据透视表
# 这个函数的参数分别代表的就是我们的行索引,列索引,对应的数值含义
user_movie = result.pivot_table(index="用户id", columns="电影名", values="评分")

# 3. 计算每两部电影间的皮尔逊相关系数
# pearson指的就是相关系数的类型:皮尔逊相关系数
# 因为这个系数的类型很多(例如斯皮尔曼系数)所以这个使用参数进行说明
corrMatrix = user_movie.corr(method="pearson")

'''二、寻找目标用户感兴趣的电影'''

# 1. 获取「用户1」评分过的电影数据
##1. 通过.loc属性,按照index的值,也就是【1】来访问行数据;
###2. 使用dropna()函数,筛选出所有不是空值的数据,这时获取到的就是「用户1」评分过的所有电影数据。
user1Ratings = user_movie.loc[1].dropna()

# 2. 预测「用户1」对未评分电影的感兴趣程度
# 2.1 依次获取「用户1」评分过的电影的名称及评分
name = user1Ratings.index
score = user1Ratings.values

# 2.2 获取电影之间的皮尔逊相关系数
#1. 在corrMatrix中,先通过列索引和变量name来获取「用户1」评分过电影与所有电影之间的皮尔逊相关系数;
#2. 再使用drop()函数,并将参数index=name传入到该函数中,删除「用户1」评分过的电影的行数据。
# 这个地方进行删除是因为这个我们要计算的是用户喜欢的电影和未评分的电影的相关性,评分过的电影不在我们的
# 考虑范围之内
simsMovie = corrMatrix[name].drop(index=name)

# 2.3 计算分数与皮尔逊相关系数之间的乘积
prod = score * simsMovie

# 2.4 求和
#对prod变量调用sum()函数,并将axis=1作为参数传入到该函数中,用于指定按水平方向进行求和。
# 这个球和计算的结果就是我们对于这个用户的电影推荐的程度,求和分数越高越容易被推荐
movieList = prod.sum(axis=1)

'''三、针对目标用户和推荐规则,作出推荐'''

# TODO 3.1 将推荐列表按照感兴趣程度降序排序
# 要找出「用户1」感兴趣程度最高的前5部电影,那就得先将movieList按照感兴趣程度进行降序排序。
# 只需对movieList这个Series使用sort_values()函数,并传入参数ascending=False,就可将Series按照它的值,也就是感兴趣程度,进行降序排序。
#注意⚠️,当对一个Series使用sort_values()时,不需要传入参数by,否则会报错。
# 这个回顾一下by参数的意义:
# 就是我们的这个排序标准有多个的时候:我们需要根据哪一项指标进行排序,这个by表示的就是进行排序的指标
# 因为这个里面只有一个求和的结果,因此不需要对于这个参数进行设置
movieList=movieList.sort_values(ascending=False)

# TODO 3.2 获取感兴趣程度最高的前5部电影
# 我们先通过访问movieList的.index属性来获取全部索引,再通过切片的方式就可以获取到前五个索引。
movieList=movieList.index[0:5]

# TODO 3.3 获取可推荐电影的名称
movieList=movieList.values

# 输出movieList进行查看
print(movieList)

5.关联分析的概念

现在你知道这个套餐是怎么做出来的吧,哈哈哈~~,都是有自己的原理的,这个原理就是我们今天学习的关联性分析

5.1事务和事务库

5.2项

5.3项集

注意,项集内不存在相同的项,如{薯条,可乐,可乐},我们根据他们的这个项集的出现的次数,来确定这个集合的受欢迎程度

6.支持度

6.1受欢迎程度

这个支持度实际上就是这个组合的受欢迎程度

6.2最小支持度

最小支持度:用这个数据进行筛选我们的出现的频率很低的项集;

6.3关联条件

这个是在大于最小支持度的频繁项集里面才有的概念;

7.置信度

置信度的举例说明:

同样这个里面也有最小置信度的概念:

8.提升度

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值