Apriori与FP-Growth:啤酒与尿布的故事


 

关联分析(无监督学习),目标是从大数据中找出那些经常一起出现的东西

项集(item set):可以是单个的项,也可以是一系列的项目的集合

关联规则:根据频繁项集挖掘出的结果。例如{尿布}-》{啤酒}    规则的左侧称为先导,右侧称为后继

支持度:一个项集在数据中出现的比例

                支持度(尿布)=(尿布出现的次数)/(购物小票的数量)=0.9

置信度:在一条规则中,出现先导也出现后继的比例

                 置信度(尿布-》啤酒)=(支持度【尿布U啤酒】)/(支持度【尿布】)=8/9

提升度:衡量先导和后继的独立性

      提升度(尿布-》啤酒)=(置信度(尿布-》啤酒)/(支持度【啤酒】)=10/9

【如果(尿布-》啤酒)的提升度等于1,这表示尿布和啤酒无关联;提升度大于1,这表示如果顾客购买了尿布,可能也会买啤酒;而提升度小于1则表示如果顾客购买了尿布,那么不太可能再购买啤酒】

确信度:对于一条规则,不发生先导而发生后继的概率与这条规则错误的概率比值

                确信度(尿布-》啤酒)=(1-支持度(啤酒))/(1-置信度(尿布-》啤酒))=9/5

关联挖掘的步骤:找出频繁项集、从频繁项集中提取规则

Apriori算法的核心:如果某个项集是频繁项集,那么它的全部子集也都是频繁项集

Apriori算法:使用排列组合的方式列举出所有可能的项集,每一次计算都需要重新读取整个数据集,从而计算本轮次的项集支持度

FP-Growth:首先使用数据生成一颗FP-Growth树,然后再根据这棵树来生成频繁项集。如下图所示

#记得安装包pip install efficient-apriori
from efficient_apriori import apriori

#设置数据集
data=[('尿布','啤酒','奶粉','洋葱'),
('尿布','啤酒','奶粉','洋葱'),('尿布','啤酒','苹果','洋葱'),('尿布','啤酒','苹果'),('尿布','啤酒','奶粉'),
'尿布','啤酒','奶粉'),('尿布','啤酒','苹果'),('尿布','奶粉','洋葱'),('奶粉','洋葱')] #挖掘频繁项集和规则 itemsets,rules=apriori(data,min_support=0.4,min_confidence=1) print(itemsets)