目录
一、关联分析概述
关联分析是关联规则挖掘,目标是发现事务数据库中不同项之间的联系,这些联系构成的规则可以帮助用户找出某些行为的特征。
1.1事务数据库
定义是全局项的集合,其中是项的唯一标识。事务数据库是一个事务的集合,每个事务都对应上的一个子集。由中部分或者全部项构成的一个集合为项集,任何非空项集中均不含有重复项。
1.2关联规则
关联规则表示项之间的关系,形如:,分别成为规则的前后件。关联规则的强度可以用它的支持度 ,即包含的事物在中所占百分比,和置信度 衡量。上最小支持度和最小置信度分为成为最小支持度阈值和最小置信度阈值,同时满足两者的关联规则成为强规则。
1.3频繁项集
给定全局项集和事务数据库,对于前者的非空项集,若其支持度大于或等于最小支持度阈值,则称其为频繁项集,若其中包含有k个项,则称其为频繁k-项集。
1.4挖掘关联规则的基本过程
1、找频繁项集:通过用户给定的最小支持度阈值,寻找所有频繁项集,即仅保留大于或等于最小支持度阈值的项集。
2、生成强关联规则:通过用户给定的最小置信度阈值,在频繁项集中寻找关联规则,即删除不满足最小置信度阈值的规则。
APRIORI算法
Apriori性质:若A是一个频繁项集,则A的每一个子集都是频繁项集。
同时,该性质具有有反单调性:对于项集A,若有AB成立,则称B为A的超集。如果一个项集不是频繁的,则其所有超集也一定不是频繁的。
基本APRIORI算法
基本思路为层次搜索迭代法,有候选的(k-1)项集来寻找候选k-项集,并判断其是否频繁。
二、代码实现
from apyori import apriori
transactions=[['A','B','C'],['A','B'],['B','C'],['A','B','C','D'],['B','C','D']]
rules=apriori(transactions,min_support=0.4,min_confidence=0.8)
results=list(rules)
for i in results:
for j in i.ordered_statistics:
X=j.items_base
Y=j.items_add
x=','.join([item for item in X])
y=','.join([item for item in Y])
if x!='':
print(x+'->'+y)
除apyori之外还可以通过mlxtend库来实现apriori算法
from mlxtend.preprocessing import TransactionEncoder
import pandas as pd
TE=TransactionEncoder()#构造转换模型
data=TE.fit_transform(transactions)#将原始数据转化为bool值
df=pd.DataFrame(data,columns=TE.columns_)#用DataFrame储存
from mlxtend.frequent_patterns import aprior
items=apriori(df,min_support=0.1,use_colnames=True)
from mlxtend.frequent_patterns import association_rules
rules=association_rules(items,min_threshold=0.7)
for i,j in rules,iterrows():#遍历二维表格的每一元素
X=j['antecedents']#关联规则前件
Y=j['consequents']#关联规则后件
x=','.join([item for item in X])#前件中元素
y=','.join([item for item in Y])#后件中元素
print(x+'->'+y)#通过字符串链接打印关联规则
本文为笔者个人学习所得,若有不妥之处,还望温和批评指正。