Apriori算法规则实现
数据仓库里面包含以下5个记录。设支持度>0.5,置信度>0.7。
id | 购买的商品 |
1 | K,C,M,Y,E |
2 | E,O,L,M,D,Y |
3 | A,M,K,E |
4 | K,Y,M,D,L |
5 | C,O,K,L,E |
使用Apriori 算法找出频繁项集,通过最终结果形成一个方案建议(即告诉老板,接下来的商品销售策略)。
1-项集支持度计算
1-项集 | 支持度计数 | 支持度 |
K | 4 | 0.8 |
C | 2 | 0.4 |
M | 4 | 0.8 |
Y | 3 | 0.6 |
E | 4 | 0.8 |
O | 2 | 0.4 |
L | 3 | 0.6 |
D | 2 | 0.4 |
A | 1 | 0.2 |
比较候选支持度计数与最小值支持度(2),筛选出1-频繁项集,支持度>0.5。
2-项集 | 支持度计数 | 支持度 |
K | 4 | 0.8 |
M | 4 | 0.8 |
Y | 3 | 0.6 |
E | 4 | 0.8 |
L | 3 | 0.6 |
由1-项集产生候选的2-项集
2-项集 | 支持度计数 | 支持度 | 置信度 |
{K,M} | 3 | 0.6 | 0.75 |
{K,Y} | 2 | 0.4 | 0.5 |
{K,E} | 3 | 0.6 | 0.75 |
{K,L} | 2 | 0.4 | 0.5 |
{M,Y} | 3 | 0.6 | 0.75 |
{M,E} | 3 | 0.6 | 0.75 |
{M,L} | 2 | 0.4 | 0.5 |
{Y,E} | 2 | 0.4 | 0.66 |
{Y,L} | 2 | 0.4 | 0.66 |
{E,L} | 2 | 0.4 | 0.5 |
筛选出2-频繁项集,置信度>0.7
2-项集 | 支持度计数 | 支持度 | 置信度 | 提升度 |
{K,M} | 3 | 0.6 | 0.75 | 0.9375 |
{K,E} | 3 | 0.6 | 0.75 | 0.9375 |
{M,Y} | 3 | 0.6 | 0.75 | 1.25 |
{M,E} | 3 | 0.6 | 0.75 | 0.9375 |
M与Y有联系,可放在一起销售。
import numpy as np
import pandas as pd
import itertools
data=pd.read_table('C://Users//Administrator//Desktop//新建文本文档.txt',engine='python',header=None,sep=' ')
#数值化
#频繁集计算
#取DataFrame行和列
#取行
#取出矩阵中所有涉及到的元素,去重,
ulist=[]
for i in np.arange(data.shape[0]):
temp=data.loc[i]
ulist.extend(temp)
ulist
#定义一个最小的支持度 min(support)=3
#算所有去重之后的商品的支持度
#存放1项集数据
data1=[] #初始化矩阵
for value in ulist:
#遍历交易记录
count=0
for j in np.arange(data.shape[0]):
#算单个商品的支持度
if(np.sum(data.loc[j]==value)>0):
count+=1
#单个商品支持度算完,保存结果
#print(str(value)+"\t"+str(count))
if(count>=3):
data1.append(value)
#I1=data.loc[0]
data1Unique=list(set(data1))
data2=list(itertools.permutations(data1Unique,2)) #排列组合
#data2=np.array(list(itertools.permutations(data1Unique,2)))
#for j in np.arange(data2.shape[0]):
#先求出1项集的集合及其支持计数,注意此处C1是字典,key为项集,value是计数,与下不同,下的C是列表只有计数
#I1.unique() 取出所有元素(一次)
#取列
#data[0]