机器学习基本模型与算法在线实验闯关

第12关:基于布尔数据集的一对一和多对一关联规则挖掘

任务描述

本关任务:针对以下布尔数据集,请编程计算规则“A->B”和“A,B->C”的支持度和置信度。 A B C 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0

相关知识

为了完成本关任务,你需要掌握:1.一对一关联规则挖掘,2.多对一关联规则挖掘。

一对一关联规则挖掘

基于上一关【相关知识】得出的Data布尔数据表,利用关联规则的置信度定义和支持度定义,挖掘两两项之间的关联规则。

 
  1. #获取字段名称,并转化为列表
  2. c=list(Data.columns)
  3. c0=0.5 #最小置信度
  4. s0=0.2 #最小支持度
  5. list1=[] #预定义列表list1,用于存放规则
  6. list2=[] #预定义列表list2,用于存放规则的支持度
  7. list3=[] #预定义列表list3,用于存放规则的置信度
  8. for k in range(len(c)):
  9. for q in range(len(c)):
  10. #对第c[k]个项与第c[q]个项挖掘关联规则
  11. #规则的前件为c[k]
  12. #规则的后件为c[q]
  13. #要求前件和后件不相等
  14. if c[k]!=c[q]:
  15. c1=Data[c[k]]
  16. c2=Data[c[q]]
  17. I1=c1.values==1
  18. I2=c2.values==1
  19. t12=np.zeros((len(c1)))
  20. t1=np.zeros((len(c1)))
  21. t12[I1&I2]=1
  22. t1[I1]=1
  23. sp=sum(t12)/len(c1) #支持度
  24. co=sum(t12)/sum(t1) #置信度
  25. #取置信度大于等于c0的关联规则
  26. if co>=c0 and sp>=s0:
  27. list1.append(c[k]+'--'+c[q])
  28. list2.append(sp)
  29. list3.append(co)
  30. #定义字典,用于存放关联规则及其置信度、支持度
  31. R={'rule':list1,'support':list2,'confidence':list3}
  32. #将字典转化为数据框
  33. R=pd.DataFrame(R)

输出: ID rule Support confidence 0 排骨—西红柿 0.444444444 0.8 1 茄子—排骨 0.222222222 0.5 2 茄子—西红柿 0.222222222 0.5 3 茄子—鸡蛋 0.222222222 0.5 4 袜子—鸡蛋 0.222222222 0.666666667 5 西红柿—排骨 0.444444444 0.8

多对一关联规则挖掘

多对一关联规则是指前件有多个项,而后件只有一个项的关联规则。关联规则挖掘中的经典算法—Apriori算法,针对中小规模的关联规则挖掘问题具有较好的适用性。

以Data布尔数据集为例,调用apriori函数挖掘其关联规则。

,

示例如下:

 
  1. import apriori #导入自行编写的apriori函数
  2. outputfile = 'apriori_rules.xls' #结果文件
  3. support = 0.2 #最小支持度
  4. confidence = 0.4 #最小置信度
  5. ms = '---' #连接符,默认'--',
  6. apriori.find_rule(Data, support, confidence, ms).to_excel(outputfile)
  7. #保存结果到Excel

输出: 正在进行第1次搜索... 数目:21... 正在进行第2次搜索... 数目:4... 结果为: support confidence 西红柿---排骨 0.444444 0.800000 排骨---西红柿 0.444444 0.800000 袜子---鸡蛋 0.222222 0.666667 茄子---排骨 0.222222 0.500000 茄子---西红柿 0.222222 0.500000 茄子---鸡蛋 0.222222 0.500000

在输出结果中,“西红柿---排骨”代表规则“西红柿—>排骨”的支持度为0.444,置信度为0.8,表示同时购买西红柿和排骨的顾客比例为0.444,而购买西红柿的顾客当中也购买了排骨的比例是0.8。

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试。


开始你的任务吧,祝你成功!

任务代码

#针对以下布尔数据集(已用一个“test12.xlsx”表格来存取,直接读取即可,字段名称为A、B、C,“#”号非表格数据):
#   A	B	C
#   1	1	0
#   0	1	1
#   1	0	0
#   1	1	1
#   1	1	1
#   1	0	0
#   1	1	1
#   0	1	1
#   1	0	0
#   1	1	1
#   1	1	0
#   1	1	1
#   1	1	0
##请编程计算规则“A->B”和“A,B->C”的支持度和置信度,分别用sp1和co1,sp2和co2来表示
def return_values():
    import pandas as pd
    # 读取数据
    data = pd.read_excel('test12.xlsx')
    # 计算指标
    total_records = len(data['A'])
    AB_records = len(data[(data['A'] == 1) & (data['B'] == 1)])
    ABC_records = len(data[(data['A'] == 1) & (data['B'] == 1) & (data['C'] == 1)])
    A_records = len(data[data['A'] == 1])
    AB_records = len(data[(data['A'] == 1) & (data['B'] == 1)])
    # 计算支持度和置信度
    sp1 = AB_records / total_records
    co1 = AB_records / A_records
    sp2 = ABC_records / total_records
    co2 = ABC_records / AB_records
    
    return (sp1,co1,sp2,co2)

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coralberry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值