python数据挖掘(5.Apriori算法)

本文介绍了Apriori算法在数据挖掘中的应用,特别是在电影推荐问题上。通过设置最小支持度,算法从大量数据中找出频繁项集,进而生成高置信度的关联规则,用于理解用户喜好并进行精准推荐。文中详细阐述了算法原理及其实现步骤,并展示了结果分析。
摘要由CSDN通过智能技术生成

数据源
第一章我们介绍了最基础的亲和性分析,尝试了所有的规则计算了所有的置信度和支持度,但是这个方法效率不高而且我们使用的数据集只有5种商品,但是实际生活中即使是小商店的商品也会超过百种,而网店商品的种类则可能更多,依旧使用第一章的亲和性分析,那么随着商品数量的增加,计算量和计算的时间也会急剧增加,所以需要一个聪明的算法来解决这个问题

Apriori算法

Apriori算法诗一个景点的亲和性分析算法,他只从数据集中频繁出现的商品中选取共同出现的商品组成频繁项集,避免上述复杂度呈指数级增长的问题,一旦找到了频繁项集,生成关联规则就很容易了。
Apriori算法首先保证规则在数据集中有足够的支持度,最重要的一个参数就是最小支持度比如要生成商品A B的频繁项集(A,B)要求支持度至少为30,那么A,B都必须至少在数据集中出现30次,更大的频繁项集也要最受这个约定。

这一章我们通过电影推荐的问题来举例。
数据集地址在文章开头

In [1]: import numpy as np                                                      

In [2]: import pandas as pd                                                     

In [3]: all_ratings = pd.read_csv('/Users/gn/scikit--learn/ml-100k/u.data',delim
   ...: iter="\t", header=None, names = ["UserID", "MovieID", "Rating", "Datetim
   ...: e"])                                                                    

In [4]: all_ratings.head()                                                      
Out[4]: 
   UserID  MovieID  Rating   Datetime
0     196      242       3  881250949
1     186      302       3  891717742
2      22      377       1  878887116
3     244       51       2  880606923
4     166      346       1  886397596

In [5]: all_ratings["Datetime"] = pd.to_datetime(all_ratings['Datetime'],unit='s
   ...: ')                                                                      

In [6]: all_ratings["Favorable"] = all_ratings['Rating'] > 3                                                            

In [7]: ratings  = all_ratings[all_ratings['UserID'].isin(range(200))]                                                  

In [8]: ratings.head()                                                                                                  
Out[8]: 
   UserID  MovieID  Rating            Datetime  Favorable
0     196      242       3 1997-12-04 15:55:49      False
1     186      302       3 1998-04-04 19:22:22      False
2      22      377       1 1997-11-07 07:18:36      False
4     166      346       1 1998-02-02 05:33:16      False
6     115      265       2 1997-12-03 17:51:28      False

In [9]: favorable_ratings = ratings[ratings["Favorable"]]                                                               

In [10]: favorable_ratings.groupby("UserID")["MovieID"]                                                                 
Out[10]: <pandas.core.groupby.generic.SeriesGroupBy object at 0x11583d9b0>

In [11]: favorable_reviews_by_users = dict((k, frozenset(v.values)) for k, v in favorable_ratings.groupby("UserID")["MovieID"])                         

In [12]: num_favorable_by_movie = ratings[["MovieID", "Favorable"]].groupby("MovieID").sum()                                                            

In [13]: num_favorable_by_movie.sort_values('Favorable',ascending=False).head()                                                                         
Out[13]: 
         Favorable
MovieID           
50           100.0
100           89.0
258           83.0
181           79.0
174           74.0

In [14]: from collections import defaultdict                                                                                                            

In [15]: frequent_itemsets = {}                                                                                                                         

In [16]: min_support = 50                                                                                                                               

In [17]: frequent_itemsets[1] = dict((frozenset((movie_id,)), row["Favorable"]) for movie_id,row in num_favorable_by_movie[num_favorable_by_movie['Favorable']>50].iterrows())          

In [18]: import sys                                                                                                                                                                    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值