亲和性分析——推荐电影

  小编今天学习了Apriori算法,用于生成频繁项集,感觉好厉害。  ——参考 Robert Layton的 数据挖掘

  所以小编特此记录加深印象。所以代码 仅仅放上核心。

  Apriori算法可以说是经典的亲和性分析算法。它只从数据集中频繁出现的商品中选取共同出现的商品组成频繁项集(frequent itemset),避免了上述复杂度呈指数级增长的问题。一旦找到频繁项集,生成关联规则就很容易了。

  挖掘亲和性分析所用的关联规则之前,我们先用Apriori算法生成频繁项集。接着,通过检测48 第 4 章 用亲和性分析方法推荐电影频繁项集中前提和结论的组合,生成关联规则(例如,如果用户喜欢电影X,那么他很可能喜欢电影Y)。

  第一个阶段,需要为Apriori算法指定一个项集要成为频繁项集所需的最小支持度。任何小于最小支持度的项集将不再考虑。如果最小支持度值过小,Apriori算法要检测大量的项集,会拖慢的运行速度;最小支持度值过大的话,则只有很少的频繁项集。找出频繁项集后,

  在第二个阶段,根据置信度选取关联规则。可以设定最小置信度,返回一部分规则,或者返回所有规则,让用户自己选。本章,我们设定最小置信度,只返回高于它的规则。置信度过低将会导致规则支持度高,正确率低;置信度过高,导致正确率高,但是返回的规则少。

  小编在看时,碰到了frozenset,查了查用法:附上菜鸟教程

  frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

里面得参数是;

  iterable -- 可迭代的对象,比如列表、字典、元组等等。

https://www.runoob.com/python/python-func-frozenset.html

  代码巧妙得利用了 集合 得特性,集合运算速度快,并且有自动去重得功能。

# 选择训练集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"])
# print(favorable_reviews_by_users)
len(favorable_reviews_by_users)
# 得到最后训练集的人数 199

# 生成一个电影有多少人喜欢
num_favorable_by_movie = ratings[["MovieID", "Favorable"]].groupby("MovieID").sum()
# print(num_favorable_by_movie)
num_favorable_by_movie.sort_values("Favorable", ascending=False)[:5]

from collections import defaultdict

def find_frequent_itemsets(favorable_reviews_by_users, k_1_itemsets, min_support):
    counts = defaultdict(int)
    for user, reviews in favorable_reviews_by_users.items():
        for itemset in k_1_itemsets.keys():
            if itemset.issubset(reviews):
                for other_reviewed_movie in reviews - itemset:
#                     用到了集合的特性 | 表示取与 解决了重复的问题(集合有去重的功能)
                    current_superset = itemset | frozenset((other_reviewed_movie,))
                    counts[current_superset] += 1
    return dict([(itemset, frequency) for itemset, frequency in counts.items() if frequency >= min_support])

import sys
frequent_itemsets = {}
min_support = 50
# print(type(frequent_itemsets))   dict
# k=1
frequent_itemsets[1] = dict((frozenset((movie_id,)), row["Favorable"])
                                for movie_id, row in num_favorable_by_movie.iterrows()
                                if row["Favorable"] > min_support)
# print(frequent_itemsets)
# exit()
print("There are {} movies with more than {} favorable reviews".format(len(frequent_itemsets[1]), min_support))
sys.stdout.flush()# 通过循环,求出了所有情况
for k in range(2, 20):
    # k代表每个数据集中 值得推荐电影总共得个数,看看结果就懂了
    # 得到结果
    cur_frequent_itemsets = find_frequent_itemsets(favorable_reviews_by_users, frequent_itemsets[k-1],
                                                   min_support)
    if len(cur_frequent_itemsets) == 0:
        print("Did not find any frequent itemsets of length {}".format(k))
        sys.stdout.flush()
        break
    else:
        print("I found {} frequent itemsets of length {}".format(len(cur_frequent_itemsets), k))
        #print(cur_frequent_itemsets)
        sys.stdout.flush()
        frequent_itemsets[k] = cur_frequent_itemsets
# 去除个数为1 的,这样的数据没办法推荐
del frequent_itemsets[1]
print(frequent_itemsets[9])
There are 20 movies with more than 50 favorable reviews
I found 145 frequent itemsets of length 2
I found 508 frequent itemsets of length 3
I found 989 frequent itemsets of length 4
I found 1146 frequent itemsets of length 5
I found 811 frequent itemsets of length 6
I found 338 frequent itemsets of length 7
I found 73 frequent itemsets of length 8
I found 5 frequent itemsets of length 9
Did not find any frequent itemsets of length 10
{frozenset({260, 356, 2571, 2028, 1196, 1198, 593, 1210, 858}): 72, frozenset({260, 356, 296, 2571, 1198, 47, 527, 593, 318}): 72, frozenset({260, 296, 2571, 2028, 1196, 1198, 593, 1210, 858}): 72, frozenset({260, 356, 296, 2571, 1198, 527, 593, 858, 318}): 81, frozenset({260, 356, 296, 2571, 1196, 593, 1210, 858, 318}): 72}--------------------------上面得到了频繁项集,下面来生成规则。规则由前提和结论组成。
# 现在创建一个列表,
candidate_rules = []
for itemset_length, itemset_counts in frequent_itemsets.items():
    for itemset in itemset_counts.keys():
        for conclusion in itemset:
            premise = itemset - set((conclusion,))       # 减号为集合itemset除去conclusion之后得
            candidate_rules.append((premise, conclusion))
print("There are {} candidate rules".format(len(candidate_rules)))

创建规则成功,只是conclusion只有一个电影推荐。

原文地址:https://www.cnblogs.com/a-runner/p/12283952.html

时间: 2024-10-12 07:38:03

亲和性分析——推荐电影的相关文章

数据挖掘-MovieLens数据集_电影推荐_亲和性分析_Aprioro算法

[python] view plain copy print? #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Feb  7 14:38:33 2017 电影推荐分析: 使用 亲和性分析方法 基于 Apriori算法 推荐电影 @author: yingzhang """ #读取数据集: http://grouplens.org/datasets/movielen

数据挖掘——亲和性分析

亲和性分析根据样本个体之间的相似度,确定它们关系的亲疏.应用场景: 1.向网站用户提供多样化的服务或投放定向广告. 2.为了向用户推荐电影或商品 3.根据基因寻找有亲缘关系的人 比如:统计顾客购买了商品1,然后再购买商品2的比率,算相似度. import numpy as np dataset_filename = "affinity_dataset.txt" x = np.loadtxt(dataset_filename) # print x[:5] # 上述代码的结果代表前5次交易

Netflix是如何向4000万用户精准推荐电影的

虎嗅注:本文来自爱范儿网,虎嗅进行了相关编辑.在信息爆炸的时代,智能推荐应时而生.内容提供商能够对用户的爱好做出更为细致的分析,从而做出更加个性化的推荐.Atlantic网站的Alexis C. Madrigal通过对Netflix影片分类的深入分析以及采访Netflix产品副总裁,揭示了Netflix影视推荐背后的真相. 外界的解读:语法 Netflix 推荐影片的时候,会给出一个非常细致的类型,或者说是一种“微类型”.Alexis 想要整理出一份完整的微类型列表.由于Netflix的微类型多

[学习]老师寒假推荐电影

由于本人责(xian)任(de)心(dan)强(teng),从网上找到了老师推荐的几部电影,供各位观看. 因为网速问题,无法一次全部上传,不过会陆续添加. 总体链接:寒假推荐电影 或者,直接点击需要的:(尚不完全) 语文老师: 1.<冰雪奇缘> 英语老师:

数据挖掘入门系列教程(一)之亲和性分析

数据挖掘入门系列教程(一)之亲和性分析 教程系列简介 系列地址:https://www.cnblogs.com/xiaohuiduan/category/1661541.html 该教程为入门教程,为博主学习数据挖掘的学习路径步骤.教程为入门教程,从最简单的开始.使用的编程语言为Python3.8.1,使用JupyterNotebook作为开发环境(使不使用JupyterNotebook都没有关系). 在学习本教程之前,你需要: 有一点python编程基础 会用百度 or 谷歌 数学知识还是要一

用pandas分析百万电影数据

用pandas分析电影数据 Lift is short, use Python. 用Python做数据分析,pandas是Python数据分析的重要包,其他重要的包:numpy.matplotlib . 安装pandas(Linux, Mac, Windows皆同): pip install pandas 电影数据来源:http://grouplens.org/datasets/movielens/ 下载数据文件解压,包含如下4个文件: users.dat 用户数据 movies.dat 电影数

推荐电影 奥黛丽赫本的十大经典电影 1953-1989

奥黛丽赫本的十部经典电影 1.<罗马假日> (Roman Holiday,1953) 导演:威廉·惠勒 风情指数★★★★★ 看点:奥黛丽·赫本和格里高利·派克的完美组合 如果没有奥黛丽·赫本,或许<罗马假日>只会作为一部平庸的二流爱情电影被少数人记得.但是有了赫本,一切变得不同.23岁的赫本,把这个故事变成了一个童话,把这个电影变成了一个梦.有多少人看了这个电影,都会想着能像格里高利·派克饰演的美国记者那样,在如画诗情的罗马邂逅这样一位公主,哪怕只是一天,甚至只是片刻. 赫本的完美

推荐电影 迪士尼经典动画片大全 1937-2008

迪士尼动画片 1937/12/21 Snow White and Seven Dwarfs (白雪公主和七个小矮人) 1 1940/02/07 Pinocchio(皮诺曹/木偶奇遇记)2 1940/11/13 Fantasia (幻想曲) 3 1941/10/23 Dumbo(小飞象)4 1942/08/13 Bambi (小鹿斑比) 5 1943/02/06 Saludos Amigos (致候吾友) 6 1945/02/03 The Three Caballeros (三骑士) 7 1946

推荐电影 梦工厂经典电影列表 1996-2012

梦工厂 百科名片 梦工厂海报 梦工厂(DreamWorks SKG)是美国排名前十位的一家电影洗印.制作和发行公司,同时也是一家电视游戏,电视节目制作公司.它制作发行的电影有超过10部票房收入超过1亿美元. 概述 电影公司始建于1994年10月,三位创始人分别是史蒂文·斯皮尔伯格(代表DreamWorks SKG中的"S"),杰弗瑞·卡森伯格(代表DreamWorks SKG中的"K")和大卫·格芬(代表DreamWorks SKG中的"G").