杂货店商品数据集挖掘关联规则实验

一、实验目的

1. 掌握使用Apriori算法和FP-growth算法挖掘频繁项集。

2. 熟悉使用提升度等度量评估关联规则。

二、实验内容

1. 杂货店商品数据集挖掘关联规则实验

(1)了解Groceries_dataset.csv中事务集的属性信息,并将事务集转换为二元表示形式;

(1)了解Groceries_dataset.csv中事务集的属性信息,根据每个用户每天的购买记录构造事务(比如用户1000在2015年3月15日对应的事务为{‘sausage’,’whole milk’,’semi-finished bread’,’yogurt’}),然后按照用户ID递增,时间递增的方式对事务进行排序;

(2)选择事务集中前100条事务,选择合适的支持度阈值,使用Apriori算法和FP-growth算法挖掘频繁项集(推荐使用mlxtend包的apriori和fpgrowth函数),并对比apriori算法和fpgrowth算法的时间复杂度;

(3)重复步骤(3),依次选择前500条,前1000条事务,对比apriori算法和fpgrowth算法的时间复杂度;

(4)使用前100条事务时,选择合适的置信度阈值,利用挖掘到的频繁项集生成强关联规则(推荐使用mlxtend包的association_rules函数)。然后使用提升度、全置信度、最大置信度、Kluc度量和余弦度量评估这些强关联规则。

三、实验报告评分标准

1. 完成实验(1)(5分)

2. 完成实验(2)(30分)

3. 完成实验(3)(20分)

4. 完成实验(4)(15分)

5. 实验过程与实验结论的记录完整(10分)

6. 表述逻辑清晰(10分)

7. 排版工整自洽,图表标题准确(10分)

四、实验过程

4.1根据每个用户每天的购买记录构造事务

导入.csv文件,将日期解析为 datetime 类型,根据每个用户每天的购买记录构造事务(列表形式),并按照用户ID递增,时间递增的方式排序

  1. 读取 CSV 文件,假设 CSV 文件路径为 'Groceries_dataset.csv'  
  2. file_path = 'Groceries_dataset.csv'  
  3. df = pd.read_csv(file_path)  
  4.   
  5. 将日期解析为 datetime 类型  
  6. df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')  
  7.   
  8. 根据每个用户每天的购买记录构造事务  
  9. transactions = df.groupby(['Member_number''Date'])['itemDescription'].apply(list).reset_index()  
  10.   
  11. 对事务进行排序,按照用户ID递增,时间递增的方式排序  
  12. data = transactions.sort_values(by=['Member_number''Date'])  

对数据进行one-hot编码,将事务集转换为二元表示形式

  1. # one_hot编码  
  2. df_enconded = pd.get_dummies(data['itemDescription'])  
  3. df_final = pd.concat([data[['Member_number','Date']],df_enconded],axis = 1)  
  4. print(df_final)  

4.2提取'itemDescription'列的前100条数据,并将每个事务集改成集合类型(set),方便后续查询的时候自动去重,并具有无序性。

  1. transactions = data['itemDescription']#.values.tolist()  
  2. # print(transactions)  
  3. transactions = transactions[:100]  
  4. result_list = transactions.apply(lambda x: {item for item in x}).tolist()  

4.3 转换事务集为适用于mlxtend的格式,方便后面使用mlxtend包中的两个算法

  1. 转换事务集为适用于mlxtend的格式  
  2. te = TransactionEncoder()  
  3. te_ary = te.fit_transform(data)  
  4. df = pd.DataFrame(te_ary, columns=te.columns_)  
  5. print(df)  

4.4 设置支持度阈值为0.05,调用库函数apriori算法和FP-growth算法,并进行时间复杂度计算

  1. # Apriori 算法  
  2. start_time = time.time()  
  3. apriori_result = apriori(df, min_support=0.05, use_colnames=True)  
  4. apriori_time = time.time() - start_time  
  5.   
  6. # FP-growth 算法  
  7. start_time = time.time()  
  8. fpgrowth_result = fpgrowth(df, min_support=0.05, use_colnames=True)  
  9. fpgrowth_time = time.time() - start_time  

4.5 生成强关联规则,因为association_rules函数只自带前件后件支持度,置信度,提升度,所以全置信度,最大置信度,kulc,余弦度量等等需要自己手动计算

  1.   生成强关联规则  
  2. rules = association_rules(apriori_result, metric="confidence", min_threshold=min_confidence)  
  3. rules['All Confidence'] = rules['support']/np.maximum(rules['antecedent support'], rules['consequent support'])  
  4. rules['Max Confidence'] = rules['support']/np.minimum(rules['antecedent support'], rules['consequent support'])  
  5. rules['Kulc'] = (rules['support']/rules['antecedent support'] + rules['support']/rules['consequent support'])/2  
  6. # rules['Cosine'] = rules['support']/(math.sqrt(rules['antecedent support']*rules['consequent support']))  
  7. rules['Cosine'] = rules.apply(lambda row: int(row['support'] / math.sqrt(row['antecedent support'] * row['consequent support'])),   

五、实验结论

5.1根据购买记录构造事务结果

图 1构造事务

图 2二元属性

5.2选择事务集中前100条事务,支持度阈值=0.05,使用Apriori算法和FP-growth算法挖掘频繁项集对比,FP-growth算法时间复杂度较低

图 3 FP-growth算法

                

图 2 Apriori算法  

5.3选择事务集中前500条事务,支持度阈值=0.05,Apriori算法时间复杂度低

          

图 5 FP-growth算法

图 4 Apriori算法  

5.4选择事务集中前1000条事务,支持度阈值=0.05,Apriori算法时间复杂度低

        

图 7 FP-growth算法

图6 Apriori算法

5.5生成强关联规则,使用提升度、全置信度、最大置信度、Kluc度量和余弦度量评估这些强关联规则

图 8强关联规则

图 10全置信度

图 9提升度

图 12 Kulc度量

图 11最大置信度

图12余弦度量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值