# -*- coding: utf-8 -*-
"""
Created on Thu Sep 27 10:59:39 2018
@author: asus
"""
#4 用亲和性分析方法推荐电影
#4.1 亲和性分析
#亲和性分析用来寻找出两个对象同时出现的情况。
#应用场景:欺诈检测;顾客区分;软件优化;产品推荐。
#4.1.1 亲和性分析算法
#Apriori算法
#其他算法有Eclat和频繁项集挖掘算法(FP-growth)
#4.1.2 选择参数
#挖掘亲和性分析所用的关联规则之前,我们先用Apriori算法生成频繁项集。接着,通过检测频繁
#项集中前提和结论的组合,生成关联规则。
#4.2 电影推荐问题
#4.2.1 获取数据集
#美国明尼苏达大学的Grouplens研究团队公开的一系列用于测试推荐算法的数据集。
#电影评分数据,http://grouplens.org/datasets/movielens/
import pandas as pd
#4.2.2 用pandas加载数据
#把分隔符设置为制表符,不要把第一行作为表头(header=None),设置好各类的名称。
all_ratings = pd.read_csv("u.data", delimiter="\t", header=None,
names = ["UserID", "MovieID", "Rating", "Datetime"])
#可以用下面的代码解析时间戳数据。
all_ratings["Datetime"] = pd.to_datetime(all_ratings['Datetime'], unit='s')
all_ratings[:5]
#4.2.3 稀疏数据格式
#序号为0的那一行表示,用户(UserID)#196在1997年12月4日为电影(MovieID)#242打了3分(满
#分是5分)
#任何没有出现在数据集中的用户和电影组合表示它们实际上是不存在的。
#4.3 Apriori算法的实现
#目标:如果用户喜欢某些电影,那么他们也会喜欢这部电影。
#首先确定用户是否喜欢某一部电影,创建新特征Favorable,喜欢为True。
all_ratings["Favorable"] = all_ratings["Rating"] > 3
all_ratings[10:15]
#从数据集中选取一部分数据用作训练集,这样能有效减少搜索空间,提升Apriori算法的速度。
#取前200名用户的打分数据。
ratings = all_ratings[all_ratings['UserID'].isin(range(200))]
#新建一个数据集,只包括用户喜欢的某部电影的数据行。
favorable_ratings = ratings[ratings["Favorable"]]
#在生成项集时,需要搜索用户喜欢的电影。
favorable_reviews_by_users = dict((k, frozenset(v.values))
for k, v in favorable_ratings.
groupby("UserID")["MovieID"])
#上面的代码把v.values存储为frozenset,便于快速判断用户是否为了某部电影打过分。对于这
#种操作集合比列表快。
#最后,创建一个数据框,以便了解每
4.亲和性分析算法
最新推荐文章于 2022-06-30 10:27:20 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)