机器学习基本模型与算法在线实验闯关
第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布尔数据表,利用关联规则的置信度定义和支持度定义,挖掘两两项之间的关联规则。
#获取字段名称,并转化为列表c=list(Data.columns)c0=0.5 #最小置信度s0=0.2 #最小支持度list1=[] #预定义列表list1,用于存放规则list2=[] #预定义列表list2,用于存放规则的支持度list3=[] #预定义列表list3,用于存放规则的置信度for k in range(len(c)):for q in range(len(c)):#对第c[k]个项与第c[q]个项挖掘关联规则#规则的前件为c[k]#规则的后件为c[q]#要求前件和后件不相等if c[k]!=c[q]:c1=Data[c[k]]c2=Data[c[q]]I1=c1.values==1I2=c2.values==1t12=np.zeros((len(c1)))t1=np.zeros((len(c1)))t12[I1&I2]=1t1[I1]=1sp=sum(t12)/len(c1) #支持度co=sum(t12)/sum(t1) #置信度#取置信度大于等于c0的关联规则if co>=c0 and sp>=s0:list1.append(c[k]+'--'+c[q])list2.append(sp)list3.append(co)#定义字典,用于存放关联规则及其置信度、支持度R={'rule':list1,'support':list2,'confidence':list3}#将字典转化为数据框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函数挖掘其关联规则。

示例如下:
import apriori #导入自行编写的apriori函数outputfile = 'apriori_rules.xls' #结果文件support = 0.2 #最小支持度confidence = 0.4 #最小置信度ms = '---' #连接符,默认'--',apriori.find_rule(Data, support, confidence, ms).to_excel(outputfile)#保存结果到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)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)