目录
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.置信度
置信度的举例说明:
同样这个里面也有最小置信度的概念: