关联规则分析-Apriori算法关联规则关联规则算法Apriori算法核心概念必懂基本原理工作流程找出频繁项集生成强关联规则算法步骤缺点优点案例运行关联规则什么是关联规则关联规则是数据挖掘中用于发现数据项之间隐含关联关系的技术常表现为“如果发生 A则很可能发生 B的形式 。它属于无监督学习方法核心目的是从大量数据中找出有价值的模式 。可以归纳为X-Y就是X发生的情况下很可能会发生Y。比如啤酒和尿布就是 尿布-啤酒 这么一个强关联规则含义是如果顾客购买尿布那么他很有可能买啤酒。经典故事啤酒和尿布的关联规则故事沃尔玛公司数据仓库里集中了其各门店的详细原始交易数据。在这些原始交易数据的基础上沃尔玛公司利用数据挖掘方法对这些数据进行分析和挖掘个意外的发现是跟尿布一起购买最多的商品竟是啤酒。经过大量实际调查和分析揭示了一个隐藏在“尿布与啤酒”背后的消费模式一年轻父亲下班后经常要到超市去买婴儿尿布而他们中有 30%~40%的人同时也为自己买一些啤酒。产生这一现象的原因是太太们常叮嘱她们的文夫下班后为小孩买尿布而丈夫们在买尿布后又随手带回了他们喜欢的啤酒。关联规则算法关联规则算法有哪些Apriori算法FP-growth算法ECLAT算法SPMF算法本文主讲Apriori算法。Apriori算法核心概念必懂项(Item)数据中单个元素如牛奶、面包项集(Itemset)一个/多个项的集合如{牛奶,面包}事务(Transaction)一条记录如一次购物清单支持度(Support)项集出现频率- support(X)包含X的事务数/总事务数频繁项集 support(X)≥min_sup 最小支持度阈值置信度(Confidence)规则 X→Y 的可靠性- confidence(X→Y)support(X∪Y)/support(X)强规则同时满足 min_sup 与 min_confApriori性质灵魂- 正向频繁项集的所有子集必频繁逆向非频繁项集的所有超集必非频繁剪枝依据基本原理频繁项集项集在事务数据库中出现的次数超过某个最小支持度阈值称为频繁项集项集是类似于{A, B, C}的集合。关联规则如果一个项集A出现在事务中那么另一个项集B也有很大可能同时出现这种关系可以用置信度和提升度来衡量。Apriori原理如果一个项集不是频繁的那么它的任何超集包含它的更大项集也不可能是频繁的。3.1 如果一个集合是频繁项集则它的所有子集也都是频繁项集例如集合 {A, C} 是频繁项集则它的子集 {A}, {C} 都是频繁项集。3.2 如果一个集合不是频繁项集则它的所有超集都不是频繁项集例如集合 {A, B} 不是频繁项集则它的子集 {A, B, C}{A, B, D}都不是频繁项集。工作流程1.设置最小支持度阈值确定一个最小支持度阈值用来过滤掉不常见的项集。2.找出所有频繁一项集扫描数据库一次找出所有项的支持度保留满足最小支持度的项。3.生成候选集使用频繁一项集生成候选二项集。4.找出频繁项集扫描数据库计算候选二项集的支持度保留满足最小支持度的项集。5.迭代过程重复步骤3和4使用当前的频繁项集生成更大项集的候选集然后找出这些候选集中的频繁项集直到无法生成新的候选集或达到最大项集长度。6.生成关联规则对于每个频繁项集生成关联规则并使用最小置信度阈值过滤掉弱规则。找出频繁项集第一次迭代对整个数据集进行遍历得到“1-项集”的候选项集合及出现频次。即{A}的出现频次为2{B}的出现频次为3{C}的出现频次为3{D}的出现频次为1{E}的出现频次为3。剔除小于最小支持度的项集得到频繁1-项集。这里的最小支持度为2表示最小的出现频次为 2因此{D}不符合最小支持度筛选得到的频繁1-项集为{A}, {B}, {C}, {E}第二次迭代将频繁1-项集自连接得到“2-项集”的候选项集合当然自连接的集合都是属于已存在的集合即得到{A、B}{AC}{AE}{BC}{BE}{CE}接着剔除小于最小支持度2 的项集得到的频繁 2-项集依次迭代直到频繁项集为空即“4-项集”为空便得到了所有的频繁项集生成强关联规则将频繁项集Z划分为非空子集X和Y其中YZ-X接着计算规则X-Y是否满足最小置信度 (Confidenee)若不满足则删去这项规则迭代得到最终的关联规则。例如对于频繁项集{BCE}它的非空子集有{B}{C}{E}{B}{C}{BE}{CE}关联规则{B}-{C, E}的置信度为sup({B,C,E})/sup({B}) 2/3若设定最小置信度为50%则该项关联规则满足最小置信度强规则。算法步骤初始化创建一个空的频繁项集列表L0。迭代对于当前的频繁项集列表Lk使用Lk生成候选集Ck1。扫描数据库计算Ck1中每个候选项集的支持度。将满足最小支持度的候选项集添加到Lk1。结束条件当无法生成新的候选项集或达到最大项集长度时停止迭代。缺点多次扫描数据库每次生成新的候选集后都需要扫描整个数据库来计算支持度。生成大量候选集尤其是在项集数量较多时可能会生成大量的候选集增加了计算负担。大数据效率低优点原理清晰、易实现、适合事务数据案例运行frommlxtend.frequent_patternsimportapriori,association_rulesfrommlxtend.preprocessingimportTransactionEncoderimportpandasaspd# 1. 模拟购物篮事务数据transactions[[牛奶,面包],[牛奶,可乐],[牛奶,面包,可乐],[面包,可乐],[面包,鸡蛋]]# 2. 数据转换为布尔矩阵teTransactionEncoder()te_arrayte.fit(transactions).transform(transactions)dfpd.DataFrame(te_array,columnste.columns_)# 3. 挖掘频繁项集 最小支持度0.4frequent_itemsetsapriori(df,min_support0.4,use_colnamesTrue)print( 频繁项集 )print(frequent_itemsets)# 4. 生成关联规则 最小置信度0.6rulesassociation_rules(frequent_itemsets,metricconfidence,min_threshold0.6)print(\n 强关联规则 )print(rules[[antecedents,consequents,support,confidence,lift]])结果结果解读支持度商品组合出现概率置信度买A大概率买B的概率提升度lift1正向强关联值越大关联性越强自定义修改改 min_support0.4 调整筛选宽松度改 min_threshold0.6 调高置信度筛选严格规则直接替换 transactions 为自己的数据集即可