数据挖掘实战(五)--用亲和性分析方法推荐电影

文章介绍了Apriori算法在电影推荐系统中的应用,通过分析用户对电影的评分数据,找出频繁项集并生成关联规则,以提高推荐的准确性。首先解释了Apriori算法的工作原理和步骤,然后展示了如何在Python中实现该算法,最后对推荐规则的置信度进行了计算和验证,证实了这种方法的有效性。

亲和性分析方法的应用场景:欺诈检测、顾客区分、软件优化、产品推荐等。

一、Apriori算法简介

Apriori算法--经典的亲和性分析算法。它只从数据集中频繁出现的商品中选取共同出现的商品组成频繁项集,一旦找到频繁项集,生成关联规则就很容易了。

频繁项集是一组达到最小支持度的项目,而关联规则由前提和结论组成。

Apriori算法原理:首先,确保了规则在数据集中有足够的支持度。比如,要生成包含商品A、B的频繁项集(A, B),要求支持度至少为30,那么A和B都必须至少在数据集中出现30次。

更大的频繁项集也要遵守该项约定,比如要生成频繁项集(A, B, C, D),那么子集(A, B, C)必须是频繁项集(当然D自己也要满足最小支持度标准)。生成频繁项集后,将不再考虑其他可能的却不够频繁的项集(这样的集合有很多),从而大大减少测试新规则所需的时间。

Apriori算法步骤

(1)把各项目放到只包含自己的项集中,生成最初的频繁项集。只使用达到最小支持度的项目。

(2)查找现有的频繁项集的超集,发现新的频繁项集,并用其生成新的备选项目。

(3)测试新生成的备选项集的频繁程度,如果不够频繁,则舍弃。如果没有新的频繁项集,就跳到最后一步。

(4) 存储新发现的频繁项集,跳到步骤(2)。

(5)返回发现的所有频繁项集。

二、Apriori算法代码实现电影推荐

  1. 加载数据集

数据集链接:http://grouplens.org/datasets/movielens/

all_ratings = pd.read_csv('./ml-100k/u.data',
                      delimiter='\t',
                      header=None,
                      names=["UserID", "MovieID", "Rating", "Datetime"])
# 用pd.to_datetime解析时间戳数据
all_ratings["Datetime"] = pd.to_datetime(all_ratings['Datetime'], unit='s')
print(all_ratings[:5])

本章数据挖掘的目标是生成如下形式的规则:如果用户喜欢某些电影,那么他们也会喜欢这部电影。作为对上述规则的扩展,我们还将讨论喜欢某几部电影的用户,是否喜欢另一部电影。创建新特征Favorable,若用户喜欢该电影,值为True。

# 1、创建新特征Favorable
all_ratings["Favorable"] = all_ratings["Rating"] > 3
print(all_ratings[10:15])
# 2、从数据集中选取一部分数据(排名前200名的用户)用作训练集。
ratings = all_ratings[all_ratings["UserID"].isin(range(200))]
# 新建一个数据集,只包括用户喜欢某部电影的数据行
favorable_ratings = ratings[ratings["Favorable"]]
# 3、创建字典favorable_reviews_by_users记录每个用户各喜欢哪些电影(记录用户打分情况)
# 代码把v.values存储为frozenset,便于快速判断用户是否为某部电影打过分
favorable_reviews_by_users = dict((k, frozenset(v.values)) for k, v in favorable_ratings.groupby("UserID")["MovieID"])
"""
用户给哪些电影打分情况:favorable_reviews_by_users
用户id为1的为电影id为1, 3, 6, 7, 9, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值