L i f t ( A → B ) = c o n ( A → B ) s u p ( B ) \ Lift(A\rightarrow B) = \frac{con(A \rightarrow B)}{sup(B)} Lift(A→B)=sup(B)con(A→B)
在A发生的基础上发生B的概率与B单独发生的概率比值
重复步骤2和3,直到无法满足最小支持度的集合。(第一阶段结束)
首先,给定最小支持度
: 0.3 = 2.1 7 \ 0.3 = \frac{2.1}{7} 0.3=72.1
Step 1:令K=1,计算单个项目的支持度,并筛选出频繁1项集(≥最小支持度)
{A},{B},{C},{D},{E},{F}的支持度分别为:0.71,0.86,0.71,0.57,0.57,0.29. {F}的支持度小于给定的最小支持度0.3,去掉,得到频繁1项集为{A},{B},{C},{D},{E}
Step 2:从K=2开始)根据K-1项的频繁项目集生成候选K项目集,并进行预剪枝
用K-1项集进行排列组合(这里K-1=1,K=2)(这里没有用到预剪枝),得到候选2项集
:
Step 3:由候选K项目集生成频繁K项集(筛选出满足最小支持度的K项集)
由最小支持度为2.1/7,可以筛选出频繁2项集
:{A,B},{A,C},{B,C},{B,D},{B,E},{C,D}
重复步骤2和3,直到无法满足最小支持度的集合:
重复第1次
(Step 2):根据频繁2项集,进行排列组合,生成候选3项集
(Step 3):首先将不满足K-1=2的项集删去,其次删去不满足最小支持度的项集(其实也可以用定理2,如项集{A,B,D},其K-1项子集{A,D}不是频繁2项集,故可以认为{A,B,D}也一定不是频繁项集)
最终得到的频繁3项集为:{A,B,C}
——(这里案例只有一个,实际情况可能很多)
{A,B,C}的所有真子集
:{A},{B},{C},{AB},{AC},{BC} 3)以排列组合的方式形成关联规则(两个项集之间不能有交集)
{A}->{B}、 {A}->{C}、{A}->{BC}、
{B}->{A}、 {B}->{C}、{B}->{AC}、
{C}->{A}、 {C}->{B}、{C}->{AB}、
{AB}->{C}、{AC}->{B}、{BC}->{A}
4)计算规则的置信度以及提升度(以{A}->{BC}为例)
置信度
: C o n ( { A } → { B , C } ) = S u p ( { B , C } ) S u p ( { A } ) = 3 / 5 = 0.6 \ Con(\left\{A\right\}→\left\{B,C\right\})=\frac{Sup(\left\{B,C\right\})}{Sup(\left\{A\right\})}=3/5=0.6 Con({A}→{B,C})=Sup({A})Sup({B,C})=3/5=0.6
提升度
: L i f t ( { A } → { B , C } ) = C o n ( { A } → { B , C } ) S u p ( { B , C } ) = 0.6 / ( 4 / 7 ) = 1.05 > 1 \ Lift(\left\{A\right\}→\left\{B,C\right\})=\frac{Con(\left\{A\right\}→\left\{B,C\right\})}{Sup(\left\{B,C\right\})}=0.6/(4/7)=1.05>1 Lift({A}→{B,C})=Sup({B,C})Con({A}→{B,C})=0.6/(4/7)=1.05>1
因此{A}→{BC}是一条比较令人信服的关联规则
同理,计算其它关联规则的置信度和提升度即可。最后输出满足条件的关联规则。
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
import pandas as pd
data_set = [['A','B','C','D'],['A','B','C','E'],['B','D','E','F'],['B','C','D','E'],['A','C','D','F'],['A','B','C'],['A','B','E']]
#转换为算法可接受模型(布尔值)
te = TransactionEncoder()
df_tf = te.fit_transform(data_set)
df = pd.DataFrame(df_tf,columns=te.columns_)
#设置支持度求频繁项集
frequent_itemsets = apriori(df,min_support=0.3,use_colnames= True)
#求关联规则,设置最小置信度为0.15
rules = association_rules(frequent_itemsets,metric = 'confidence',min_threshold = 0.15)
#设置最小提升度
rules = rules.drop(rules[rules.lift <1.0].index)
#设置标题索引并打印结果
rules.rename(columns = {'antecedents':'from','consequents':'to','support':'sup','confidence':'conf'},inplace = True)
rules = rules[['from','to','sup','conf','lift']]