计算关联规则置信度
X->Y关联规则
公式如下:
公式类似于条件概率,显而易见,计算置信度需计算X|Y,及X的支持度计数
问题描述
给定数据有购物篮数据以及需要计算关联规则的数据集,如下所示:
1.shopping数据
2.rules数据
解决思路
根据上述公式计算置信度,分为两步:
1.计算X的支持度计数
2.计算X|Y的支持度计数
计算方法多种多样,以下提供一种基于集合的思路的计算方法。
Python代码
import runpy
import pandas as pd
import numpy as np
# 读取数据
rule=pd.read_excel("rules.xlsx",usecols="A:B") # 读取两列数据
data=pd.read_excel("shopping.xlsx",header=None)
# 将每一行数据取出,变成list
data_array=np.array(data)
data_list=data_array.tolist()
data_set={}
# 生成数据集合
for i in range(0,len(data_list)):
data_set[i]=set(data_list[i])
# 取X,Y,split_set为分隔符
split_set={','}
# 求关联规则X->Y
for i in range(0,len(rule)):
# count1为X的计数,count2为X|Y的计数
count1=0
count2=0
list1=list(rule.iloc[i,0])
list2=list(rule.iloc[i,1])
# 去除逗号
set_X=set(list1)-split_set
set_Y=set(list2)-split_set
out_list2=list(set_Y)
print(set_X,end="")
print("->",end="")
print(set_Y,end="")
# 求X的支持度计数
for k in range(0,len(data_set)):
# 求交集 判断是否满足
u=set_X&data_set[k]
if len(u)==len(set_X):
count1=count1+1
# 求X|Y的集合
for j in range(0,len(out_list2)):
set_X.add(out_list2[j])
# 计算X|Y的支持度计数
for l in range(0,len(data_set)):
# 求交集 判断是否满足
m=set_X&data_set[l]
if len(m)==len(set_X):
count2=count2+1
print("置信度为:",end="")
print(count2/count1)
运行结果
结语
仅供参考,如有任何问题可私聊与我联系,若对你有帮助,还请点个赞关注一下!