关联规则基本算法
- 格式:doc
- 大小:572.00 KB
- 文档页数:9
数据挖掘中的关联规则算法使用方法教程数据挖掘是一门通过从大量数据中发现隐藏模式、关系和信息的技术。
关联规则算法是数据挖掘中的重要工具,用于发现数据集中的关联关系和规律。
本教程将介绍关联规则算法的基本概念、使用方法和常见问题。
一、关联规则算法概述关联规则算法主要用于发现数据集中的关联关系和规律,它可以帮助我们了解事物之间的相互关系,并通过这些关系进行预测和推断。
常见的应用场景包括购物篮分析、市场篮子分析、推荐系统等。
关联规则算法通过分析频繁项集和支持度,找到频繁项集之间的关联规则。
频繁项集是指在数据集中频繁出现的组合项集,支持度是指某个项集在数据集中出现的频率。
通过计算支持度和置信度,可以找到具有较高置信度的关联规则。
常用的关联规则算法包括Apriori算法、FP-Growth算法和Eclat算法。
接下来将逐一介绍这些算法的使用方法。
二、Apriori算法1. Apriori算法基本原理Apriori算法是关联规则算法中最常用的一种算法。
它通过迭代的方式逐步生成频繁项集,然后根据频繁项集生成关联规则。
Apriori算法的基本原理如下:- 生成频繁1项集;- 循环生成候选k项集,并计算支持度;- 剪枝:删除支持度低于阈值的项集,得到k频繁项集;- 生成关联规则,并计算置信度。
2. Apriori算法使用步骤使用Apriori算法进行关联规则挖掘的步骤如下:- 输入数据集:准备一份包含项集的数据集;- 设置支持度和置信度的阈值;- 生成频繁1项集;- 根据频繁1项集生成2频繁项集;- 通过剪枝操作得到k频繁项集;- 根据频繁项集生成关联规则,并计算置信度;- 输出频繁项集和关联规则。
三、FP-Growth算法1. FP-Growth算法基本原理FP-Growth算法是一种高效的关联规则挖掘算法,它通过构建频繁模式树来快速发现频繁项集和关联规则。
FP-Growth算法的基本原理如下:- 构建FP树:将数据集构造成FP树,每个节点表示一个项,每个路径表示一条事务;- 构建条件模式基:从FP树中抽取频繁1项集,并构建条件模式基;- 通过条件模式基递归构建FP树;- 根据FP树生成关联规则。
关联规则算法jaccard相似度关联规则算法Jaccard相似度关联规则算法是数据挖掘领域中一种常用的方法,用于发现数据集中不同属性之间的关联关系。
其中,Jaccard相似度是一种常用的关联规则算法之一。
本文将介绍Jaccard相似度的基本原理和应用场景,以及如何计算Jaccard相似度。
一、Jaccard相似度的基本原理Jaccard相似度是一种用于衡量两个集合相似程度的指标,它是通过计算两个集合的交集与并集的比值来确定的。
具体而言,Jaccard 相似度的计算公式如下所示:J(A,B) = |A ∩ B| / |A ∪ B|其中,A和B分别代表两个集合,|A|表示集合A的元素个数,|B|表示集合B的元素个数,|A ∩ B|表示A和B的交集的元素个数,|A ∪ B|表示A和B的并集的元素个数。
二、Jaccard相似度的应用场景Jaccard相似度广泛应用于数据挖掘、信息检索、社交网络分析等领域。
以下是几个常见的应用场景:1. 电商推荐系统:通过计算用户的购买记录与其他用户的购买记录之间的Jaccard相似度,可以找到与该用户购买行为相似的其他用户,从而向该用户推荐相关商品。
2. 新闻推荐系统:通过计算用户阅读的新闻文章与其他用户阅读的新闻文章之间的Jaccard相似度,可以找到与该用户阅读兴趣相似的其他用户,从而向该用户推荐相关新闻。
3. 社交网络分析:通过计算用户在社交网络中的好友列表与其他用户的好友列表之间的Jaccard相似度,可以找到与该用户社交关系相似的其他用户,从而进行社交网络分析。
三、Jaccard相似度的计算方法计算Jaccard相似度的方法较为简单,可以按照以下步骤进行:1. 将两个集合A和B分别转化为二进制向量表示,其中向量的每一维对应集合中的一个元素。
2. 分别计算两个向量的交集和并集,即分别统计两个向量中对应维度上同时为1的个数和至少一个为1的个数。
3. 根据Jaccard相似度的计算公式,将交集的个数除以并集的个数,得到Jaccard相似度的值。
关联规则(Apriori算法)关联分析直观理解 关联分析中最有名的例⼦是“尿布与啤酒”。
据报道,美国中西部的⼀家连锁店发现,男⼈们会在周四购买尿布和啤酒。
这样商店实际上可以将尿布与啤酒放在⼀块,并确保在周四全价销售从⽽获利。
当然,这家商店并没有这么做。
频繁项集是指那些经常出现在⼀起的物品集合,⽐如{葡萄酒,尿布, ⾖奶}就是频繁项集的⼀个例⼦⽀持度(support) ⼀个项集的⽀持度(support)被定义为数据集中包含该项集的记录所占的⽐例 {⾖奶}的⽀持度为4/5。
{⾖奶,尿布}的⽀持度为3/5可信度(confidence ) 可信度或置信度(confidence)是针对⼀条诸如{尿布} ➞ {葡萄酒}的关联规则来定义的。
这条规则的可信度被定义为“⽀持度({尿布, 葡萄酒})/⽀持度({尿布})”。
由于{尿布, 葡萄酒}的⽀持度为3/5,尿布的⽀持度为4/5,所以“尿布➞葡萄酒”的可信度为3/4=0.75。
这意味着对于包含“尿布”的所有记录,我们的规则对其中75%的记录都适⽤。
Apriori算法的⽬标是找到最⼤的K项频繁集⽀持度和可信度是⽤来量化关联分析是否成功的⽅法。
假设想找到⽀持度⼤于0.8的所有项集,应该如何去做?⼀个办法是⽣成⼀个物品所有可能组合的清单,然后对每⼀种组合统计它出现的频繁程度,但当物品成千上万时,⾮常慢,这时就能⽤Apriori算法关联分析中最有名的例⼦是“尿布与啤酒”。
据报道,美国中西部的⼀家连锁店发现,男⼈们会在周四购买尿布和啤酒。
这样商店实际上可以将尿布与啤酒放在⼀块,并确保在周四全价销售从⽽获利。
当然,这家商店并没有这么做。
⼀般我们使⽤三个指标来度量⼀个关联规则,这三个指标分别是:⽀持度、置信度和提升度。
Support(⽀持度):表⽰同时包含A和B的事务占所有事务的⽐例。
如果⽤P(A)表⽰使⽤A事务的⽐例,那么Support=P(A&B)Confidence(可信度):表⽰使⽤包含A的事务中同时包含B事务的⽐例,即同时包含A和B的事务占包含A事务的⽐例。
时序关联规则算法公式
时序关联规则算法(Sequential Pattern Mining)是一种用于
发现时间序列数据中的模式和规律的算法。
其中比较常见的算法包
括PrefixSpan、GSP(Generalized Sequential Pattern)、SPAM (Sequential PAttern Mining using a Bitmap representation)、CloSpan等。
这些算法的公式会有所不同,我会以PrefixSpan算法
为例来解释其公式。
PrefixSpan算法的公式如下:
PrefixSpan(T, minsup, Σ)。
其中:
T表示输入的时间序列数据集;
minsup表示最小支持度阈值,用于过滤掉支持度低于该阈值的
模式;
Σ表示时间序列数据集中的符号集合。
具体算法流程如下:
1. 找出时间序列数据集T中的所有频繁1项集;
2. 根据频繁1项集生成所有频繁2项集;
3. 以此类推,直到无法生成更多的频繁k项集为止;
4. 对于每个频繁k项集,计算其支持度,若支持度大于等于minsup,则将其作为频繁模式输出。
以上是PrefixSpan算法的简单公式和流程,其他时序关联规则算法的公式和流程也会有所不同,但都是基于类似的原理进行模式挖掘和规律发现。
希望这些信息能够帮助你理解时序关联规则算法的公式和原理。
关联规则基本算法关联规则是一种用于发现数据集中属性之间关联关系的技术。
它可用于市场分析、销售预测、推荐系统等领域,有助于了解消费者购买行为、产品关联等。
关联规则算法的基本过程包括:找到频繁项集、生成关联规则和评估规则的可信度。
1.找到频繁项集:频繁项集是指在数据集中经常同时出现的一组项。
使用Apriori算法是发现频繁项集的一种常用方法。
Apriori算法基于Apriori原则,该原则表示如果一个项集是频繁的,那么它的所有子集也是频繁的。
算法的步骤如下:-第一步,扫描数据集,计算每个项的支持度,即项集在数据集中出现的频率。
-第二步,根据设定的最小支持度阈值,选择满足条件的项集作为候选项集。
-第三步,根据候选项集生成新的候选项集,直到无法生成满足条件的项集为止。
-第四步,根据设定的最小支持度阈值,筛选出频繁项集。
2.生成关联规则:在找到频繁项集后,可以根据它们生成关联规则。
关联规则具有形如“A->B”的形式,表示项集A和项集B之间存在其中一种关联关系。
关联规则的生成过程如下:-第一步,对于每个频繁项集,生成该项集的所有非空子集作为规则的前提条件,项集剩余的部分作为规则的结果。
-第二步,根据设定的最小置信度阈值,筛选出满足条件的关联规则。
3.评估规则的可信度:评估规则的可信度是为了确定生成的关联规则是否具有实际意义。
可以使用支持度和置信度来评估规则的可信度。
-支持度是指规则在数据集中出现的频率,可以用来判断规则的普适性。
支持度高表示规则适用范围广。
-置信度是指在前提条件出现的情况下,结果项出现的概率,可以用来判断规则的准确性。
置信度高表示规则的预测准确性高。
通过计算规则的支持度和置信度,可以对规则进行排序和筛选,选择具有较高可信度的关联规则。
关联规则算法有很多改进的方法,例如FP-Growth算法、ECLAT算法等。
这些算法在找到频繁项集的过程中做了优化,提高了算法的效率和准确性。
总结起来,关联规则算法是一种发现数据集中属性之间关联关系的方法。
关联规则的四种算法关联规则是数据挖掘领域中的一个基础方法,其主要用于寻找一个数据集中不同属性之间的关系和规律。
在实际的应用场景中,关联规则算法被广泛应用于市场营销、电商推荐、客户分析等领域。
本文将介绍关联规则的四种经典算法:Apriori算法、FP-growth算法、ECLAT算法和SPMF算法,并分别从算法原理、实现过程、优缺点等多个方面进行详细的介绍。
一、Apriori算法Apriori算法是关联规则中的一种基础算法,它是R. Agrawal和R. Srikanth于1994年提出的。
该算法的主要思想是:如果某个项集是频繁的,那么它的所有子集也应该是频繁的。
这意味着如果一个项集没有达到最小支持度的要求,那么包含这个项集的项集必定不能达到最小支持度要求。
Apriori算法的实现过程主要分为两个步骤。
第一步是生成候选项集,即根据原始数据集生成所有可能出现的项集,包括单项、双项、三项等。
第二步是计算每个项集的支持度,并根据最小支持度对项集进行筛选,得到频繁项集。
Apriori算法的优点是它的思想简单易懂,容易实现。
然而,由于该算法需要生成大量的候选项集,因此它的计算复杂度比较高,而且在处理大规模数据时不够高效。
二、FP-growth算法FP-growth算法是一种基于树结构的关联规则算法,它最早是由Han J.和Kamber M.在2000年提出的。
该算法主要采用基于前缀树的方法,先将原始数据集转换为一棵FP树(频繁模式树),然后通过对FP树的递归遍历,得到所有的频繁项集。
FP-growth算法的实现过程主要分为两个步骤。
第一步是构建FP树,即对原始数据集进行一个预处理,生成一棵FP树。
第二步是遍历FP树,根据FP树的头指针表和条件模式基,递归地生成频繁项集。
FP-growth算法的优点是它不需要生成大量的候选项集,可以减少计算复杂度,同时也具有较高的效率和准确率。
同时,该算法也具有较好的扩展性和灵活性,可以通过实现不同的优化方式来适应不同的数据集。
apriori关联规则算法步骤
Apriori关联规则算法是用于挖掘大规模数据集中的频繁项集和关联规则的经典算法。
它的步骤如下:
1. 初始化:设置最小支持度阈值(用于确定频繁项集)和最小置信度阈值(用于确定关联规则)。
2. 扫描数据集:统计每个项的支持度计数。
3. 生成频繁项集:根据最小支持度阈值,从所有项中选择支持度计数大于等于阈值的项作为频繁1项集。
4. 迭代生成候选项集:根据频繁(k-1)项集,生成候选k项集。
5. 剪枝:对候选k项集中的每个项,检查其所有(k-1)项子集是否都是频繁(k-1)项集,如果不满足,则将该项删除。
6. 计算支持度计数:扫描数据集,统计候选k项集的支持度计数。
7. 生成频繁项集:根据最小支持度阈值,从候选k项集中选择支持度计数大于等于阈值的项作为频繁k项集。
8. 重复步骤4-7,直到没有更多频繁项集生成为止。
9. 生成关联规则:对于每个频繁项集,生成其所有非空子集作为规则的前件,将前件和后件的并集作为规则的后件。
10. 计算置信度:计算每个关联规则的置信度。
11. 根据最小置信度阈值,筛选出满足条件的关联规则。
12. 输出频繁项集和关联规则。
数据挖掘中的关联规则挖掘算法数据挖掘是一种通过自动或半自动的方式从大量数据集中挖掘出隐藏的模式、关系和规律的过程。
而在数据挖掘的过程中,关联规则挖掘算法被广泛应用于发现数据集中的相关性。
一、关联规则挖掘算法的概述关联规则挖掘算法主要用于挖掘数据集中的频繁项集和关联规则。
频繁项集是指在数据集中经常同时出现的一组项的集合,而关联规则则是描述这些频繁项集之间的关联性的规则。
常用的关联规则挖掘算法包括Apriori算法和FP-growth算法。
Apriori算法是一种基于候选项集生成的算法,它通过逐层扫描事务数据库来发现频繁项集;而FP-growth算法则是一种基于前缀树的算法,它通过构建一种称为FP树的数据结构来高效地挖掘频繁项集。
二、Apriori算法的原理和步骤Apriori算法是一种经典的关联规则挖掘算法,其基本原理是通过逐层扫描事务数据库,从候选项集生成频繁项集。
以下是Apriori算法的基本步骤:1. 初始化:将每个单个项作为候选项集,并对事务数据库进行扫描,计算每个项的支持度。
2. 剪枝:根据最小支持度阈值,删除不满足支持度要求的候选项集。
3. 连接:根据频繁项集的特点,将多个满足支持度要求的候选项集进行连接,生成新的候选项集。
4. 重复步骤2和步骤3,直到无法生成新的候选项集为止。
5. 最后得到的频繁项集即为所求。
三、FP-growth算法的原理和步骤FP-growth算法是一种高效的关联规则挖掘算法,其主要原理是通过构建FP树来存储事务数据库,并利用FP树的特性来挖掘频繁项集。
以下是FP-growth算法的基本步骤:1. 构建FP树:遍历事务数据库,统计每个项的支持度,并基于支持度构建FP树。
2. 构建条件模式基:通过遍历FP树的每个项,构建该项对应的条件模式基,以及该项的条件FP树。
3. 递归挖掘频繁项集:对于每个项,以其对应的条件FP树为输入,递归地应用FP-growth算法挖掘频繁项集。
数据挖掘——关联算法⼀、概念关联(Association)关联就是把两个或两个以上在意义上有密切联系的项组合在⼀起。
关联规则(AR,Assocaition Rules)⽤于从⼤量数据中挖掘出有价值的数据项之间的相关关系。
(购物篮分析)协同过滤(CF,Collaborative Filtering)协同过滤常常被⽤于分辨某位特定顾客可能感兴趣的东西,这些结论来⾃于对其他相似顾客对哪些产品感兴趣的分析。
(推荐系统)⼆、关联规则1、相关数据指标两个不相交的⾮空集合X、Y,如果X -> Y,就说X -> Y是⼀条关联规则。
强度:⽀持度(Support):support({X -> Y}) = 集合X与集合Y中的项在⼀条记录中同时出现的次数 / 数据记录的个数 ⾃信度(Confidence):confidence({X -> Y})集合X与集合Y中的项在⼀条记录中同时出现的次数 / 集合X出现的次数效度:提升度(Lift):度量规则是否可⽤的指标,描述的是相对于不⽤规则,使⽤规则可以提⾼多少,提升度⼤于1,规则有效 lift({X -> Y}) = confidence({X -> Y}) / support({X -> Y})2、计算步骤扫描数据集,统计⼀级候选集出现的次数清除不满⾜条件的候选项集,得到⼀级项集从⼀级项集中国,组合⼆级候选项集,统计数据集中它们出现的次数清除不满⾜条件的候选项集,得到⼆级项集从⼆级项集中,组合三级候选项集,统计数据集中他们出现的次数……将得到的项集作为结果返回⼤致过程如下:3、使⽤python实现关联算法(apriori算法)!apriori 包不⽀持DataFrame的数据格式,需要将数据转化为array数组#导⼊如下格式的数据#变换数据格式,然后通过apriori⽅法进⾏处理transform = data.groupby(by='交易ID').apply(lambda x: list(x.购买商品)).valuesresult = list(apriori(transform))输出result并观察,发现如下规律#该数据格式包含各种项集和所对应的⽀持度、⾃信度、提升度'''RelationRecord(items=frozenset({'可乐'}),support=0.4,ordered_statistics=[OrderedStatistic(items_base=frozenset(),items_add=frozenset({'可乐'}),confidence=0.4,lift=1.0)])'''#items = items_base + items_add#遍历result,得到每个项集(X 与 Y ,并得到相对应的⽀持度、⾃信度和提升度supports = []confidences = []lifts = []bases = []adds = []for i in result:supports.append(i.support)confidences.append(i.ordered_statistics[0].confidence)lifts.append(i.ordered_statistics[0].lift)bases.append(list(i.ordered_statistics[0].items_base))adds.append(list(i.ordered_statistics[0].items_add))#将结果转化为容易处理的数据框get_result = pd.DataFrame({'base': bases,'add': adds,'support': supports,'confidence': confidences,'lift': lifts})#得到如下的数据框,其中有不同项集及其对应结果,可通过关联规则得到符合的关联项三、协同过滤1、相关数据指标协同过滤简单来说就是利⽤某兴趣相投、拥有共同经验的群体的喜好来推荐⽤户感兴趣的信息。
关联规则挖掘算法1. Apriori算法Apriori 算法是最经典也是最早被提出的关联规则挖掘算法。
它的核心思想是基于频繁项集的前缀具有频繁项集性质(Apriori性质),通过迭代生成频繁项集。
具体步骤如下:(1)扫描数据集,得到每个项的支持度计数作为1-项集(候选频繁项集);(2)根据阈值(最小支持度)筛选出1-项集中的频繁项集;(3)通过频繁项集生成候选k+1项集;(4)对候选k+1项集进行支持度计数,筛选出频繁k+1项集;(5)重复步骤(3)和(4),直至无法生成频繁k+1项集。
Apriori算法的优点是简单易懂,可以找到所有的频繁项集和关联规则。
缺点是效率较低,每一次迭代都要重新扫描整个数据集。
2. FP-growth算法FP-growth 算法(Frequecy-Pattern growth)是一种基于前缀树数据结构的关联规则挖掘算法。
与Apriori算法不同,FP-growth算法通过构建频繁项集树(FP-tree)来挖掘频繁项集。
具体步骤如下:(1)扫描数据集,得到每个项的支持度计数作为1-项集;(2)根据阈值(最小支持度)筛选出1-项集中的频繁项集,并按照支持度降序排列;(3)构建FP-tree:对数据集进行预处理,将所有事务按照频繁项集中的顺序进行排序,然后根据排序后的事务构建FP-tree;(4)对FP-tree进行条件模式基的生成,并以条件模式基为输入进行递归挖掘频繁项集;(5)从FP-tree的叶子节点开始生成关联规则。
FP-growth算法的优点在于减少了多次扫描数据集的开销,通过压缩数据来进行频繁项集挖掘,提高了效率。
缺点是需要占用较大的内存存储FP-tree。
3. Eclat算法Eclat算法(Equivalence Class Transformation)是一种基于垂直数据格式的关联规则挖掘算法。
它的核心思想是通过交叉计算每对项的支持度,而不是对整个数据集进行扫描。
关联规则基本算法h-mine
h-mine算法是一种用于挖掘关联规则的基本算法。
它是一种频繁项
集挖掘算法,在发现频繁项集的基础上,通过剪枝策略来生成关联规则,
并计算规则的支持度和置信度。
具体步骤如下:
1.定义最小支持度和最小置信度,通过扫描数据集得到支持度不低于
最小支持度的频繁项集集合。
2.对于每个频繁项集,生成包含它的所有非空子集。
例如,对于
{A,B,C}这个频繁项集,生成{A,B}、{A,C}、{B,C}、{A}、{B}和{C}。
3.对于每一个包含频繁项集的非空子集,计算它们的支持度和置信度。
例如,对于{A,B},计算它们的支持度和置信度。
4.针对置信度大于最小置信度的关联规则,输出这些关联规则。
5.重复步骤2-4,直到所有的关联规则都被计算完毕。
h-mine算法中的关键部分是如何剪枝,即如何确定哪些包含频繁项
集的子集应该被计算其支持度和置信度。
这一步骤是通过h-tail算法实
现的,具体细节可以参考相关文献。
强直接关联规则1. 引言强直接关联规则是数据挖掘中的一种常见技术,用于发现数据集中项之间的关联性。
通过分析大量的交易记录或者其他类型的数据,可以找到一些频繁出现在一起的项,并根据这些项之间的关系推断出新的关联规则。
这些规则能够帮助我们了解不同项之间的关联程度,从而为决策和预测提供支持。
本文将介绍强直接关联规则的基本概念和算法原理,并通过一个具体案例来说明如何应用强直接关联规则进行分析。
2. 强直接关联规则基本概念强直接关联规则是指在给定一个数据集D和一个最小支持度阈值min_support时,满足以下两个条件的频繁项集与其对应的强直接关联规则:•支持度:频繁项集在数据集D中出现的比例。
即一个项集出现在数据集中的次数除以总事务数。
•置信度:强直接关联规则A->B表示当事务包含A时,B也会同时出现的概率。
3. 强直接关联规则算法原理强直接关联规则算法主要包括两个步骤:频繁项集的发现和强直接关联规则的生成。
3.1 频繁项集的发现频繁项集是指在数据集D中出现次数不小于最小支持度阈值min_support的项集。
常用的频繁项集挖掘算法有Apriori算法和FP-growth算法。
•Apriori算法:Apriori算法是一种基于候选项集生成的方法。
它通过迭代地生成候选项集,并使用剪枝策略来减少候选项集的数量,从而提高效率。
•FP-growth算法:FP-growth算法是一种基于前缀树结构(FP树)的方法。
它通过构建FP树来压缩数据,并使用递归方式进行频繁项集挖掘,避免了生成候选项集的过程,因此效率较高。
3.2 强直接关联规则的生成在得到频繁项集后,可以通过计算置信度来生成强直接关联规则。
对于一个频繁项集A,可以将其划分为两个非空子集X和Y,其中X表示规则的前件,Y表示规则的后件。
然后计算规则A->B的置信度:置信度(A->B) = 支持度(A∪B) / 支持度(A)如果置信度大于等于最小置信度阈值min_confidence,则认为规则A->B是强直接关联规则。
关联规则基本算法及其应用1.关联规则挖掘1.1 关联规则提出背景1993年,Agrawal 等人在首先提出关联规则概念,同时给出了相应的挖掘算法AIS ,但是性能较差。
1994年,他们建立了项目集格空间理论,并依据上述两个定理,提出了著名的Apriori 算法,至今Apriori 仍然作为关联规则挖掘的经典算法被广泛讨论,以后诸多的研究人员对关联规则的挖掘问题进行了大量的研究。
关联规则挖掘在数据挖掘中是一个重要的课题,最近几年已被业界所广泛研究。
关联规则最初提出的动机是针对购物篮分析(Market Basket Analysis)问题提出的。
假设分店经理想更多的了解顾客的购物习惯(如下图)。
特别是,想知道哪些商品顾客可能会在一次购物时同时购买?为回答该问题,可以对商店的顾客事物零售数量进行购物篮分析。
该过程通过发现顾客放入“购物篮”中的不同商品之间的关联,分析顾客的购物习惯。
这种关联的发现可以帮助零售商了解哪些商品频繁的被顾客同时购买,从而帮助他们开发更好的营销策略。
1.2 关联规则的基本概念关联规则定义为:假设12{,,...}m I i i i =是项的集合,给定一个交易数据库12D={t ,t ,...,t }m , 其中每个事务(Transaction)t 是I 的非空子集,即t I ∈,每一个交易都与一个唯一的标识符TID(Transaction ID)对应。
关联规则是形如X Y ⇒的蕴涵式, 其中X,Y I ∈且X Y φ⋂=,X 和Y 分别称为关联规则的先导(antecedent 或left-hand-side, LHS)和后继(consequent 或right-hand-side, RHS)。
关联规则X Y ⇒在D 中的支持度(support)是D 中事务包含X Y ⋃的百分比,即概率()P X Y ⋃;置信度(confidence)是包含X 的事务中同时包含Y 的百分比,即条件概率(|)P Y X 。
如果满足最小支持度阈值和最小置信度阈值,则称关联规则是有趣的。
这些阈值由用户或者专家设定。
用一个简单的例子说明。
上表是顾客购买记录的数据库D,包含6个事务。
项集I={网球拍,网球,运动鞋,羽毛球}。
考虑关联规则:网球拍网球,事务1,2,3,4,6包含网球拍,事务1,2,5,6同时包含网球拍和网球,支持度3support0.56==,置信度3confident0.65==。
若给定最小支持度α = 0.5,最小置信度β = 0.8,关联规则网球拍网球是有趣的,认为购买网球拍和购买网球之间存在关联。
1.3 关联规则的分类按照不同标准,关联规则可以进行分类如下:(1)基于规则中处理的变量的类别,关联规则可以分为布尔型和数值型。
布尔型关联规则处理的值都是离散的、种类化的,它显示了这些变量之间的关系;而数值型关联规则可以和多维关联或多层关联规则结合起来,对数值型字段进行处理,将其进行动态的分割,或者直接对原始的数据进行处理,当然数值型关联规则中也可以包含种类变量。
例如:性别=“女”=>职业=“秘书” ,是布尔型关联规则;性别=“女”=>avg(收入)=2300,涉及的收入是数值类型,所以是一个数值型关联规则。
(2)基于规则中数据的抽象层次,可以分为单层关联规则和多层关联规则。
在单层的关联规则中,所有的变量都没有考虑到现实的数据是具有多个不同的层次的;而在多层的关联规则中,对数据的多层性已经进行了充分的考虑。
例如:IBM台式机=>Sony 打印机,是一个细节数据上的单层关联规则;台式机=> Sony打印机,是一个较高层次和细节层次之间的多层关联规则。
(3)基于规则中涉及到的数据的维数,关联规则可以分为单维的和多维的。
在单维的关联规则中,我们只涉及到数据的一个维,如用户购买的物品;而在多维的关联规则中,要处理的数据将会涉及多个维。
换成另一句话,单维关联规则是处理单个属性中的一些关系;多维关联规则是处理各个属性之间的某些关系。
例如:啤酒=>尿布,这条规则只涉及到用户的购买的物品;性别=“女”=>职业=“秘书”,这条规则就涉及到两个字段的信息,是两个维上的一条关联规则。
2.关联规则挖掘的相关算法关联规则最为经典的算法是Apriori算法。
由于它本身有许多固有缺陷,后来的研究者又纷纷提出了各种改进算法或者不同的算法,频繁树(FP-Tree)算法应用也十分广泛。
本文将就这两种典型算法进行研究。
2.1Apriori算法2.1.1预备知识关联规则的挖掘分为两步:(1)找出所有频繁项集;(2)由频繁项集产生强关联规则。
而其总体性能由第一步决定。
在搜索频繁项集的时候,最简单、基本的算法就是Apriori算法。
它是R.Agrawal和R.Srikant于1994年提出的为布尔关联规则挖掘频繁项集的原创性算法。
算法的名字基于这样一个事实:算法使用频繁项集性质的先验知识。
Apriori使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。
首先,通过扫描数据库,累积每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合。
该集合记作L1。
然后,L1用于找频繁2项集的集合L2,L2用于找L3,如此下去,直到不能再找到频繁k项集。
找每个L k需要一次数据库全扫描。
为提高频繁项集逐层产生的效率,一种称作Apriori性质的重要性质用于压缩搜索空间。
Apriori性质:频繁项集的所有非空子集也必须是频繁的。
Apriori性质基于如下观察。
根据定义,如果项集I不满足最小支持度阈值min_sup,则I不是频繁的,即P(I)<min_sup。
如果项A添加到项集I,则结果项集(即I A)不可能比I 更频繁出现。
因此,I A也不是频繁的,即P(I A)<min_sup。
2.1.2 Apriori算法的核心思想文献1中对Apriori核心算法思想简要描述如下:该算法中有两个关键步骤连接步和剪枝步。
(1) 连接步:为找出L k(频繁k项集),通过L k-1与自身连接,产生候选k项集,该候选项集记作C k;其中L k-1的元素是可连接的。
(2) 剪枝步:C k是L k的超集,即它的成员可以是也可以不是频繁的,但所有的频繁项集都包含在C k中。
扫描数据库,确定C k中每一个候选的计数,从而确定L k(计数值不小于最小支持度计数的所有候选是频繁的,从而属于L k)。
然而,C k可能很大,这样所涉及的计算量就很大。
为压缩C k,使用Apriori性质:任何非频繁的(k-1)项集都不可能是频繁k项集的子集。
因此,如果一个候选k项集的(k-1)项集不在L k中,则该候选项也不可能是频繁的,从而可以由C k中删除。
这种子集测试可以使用所有频繁项集的散列树快速完成。
2.1.3 Apriori算法描述Apriori算法,使用逐层迭代找出频繁项集。
输入:事务数据库D;最小支持度阈值min_sup。
输出:D 中的频繁项集L。
1)L1 = find_frequent_1_itemsets(D);2)for (k = 2;L k-1≠;k++){3)Ck = aproiri_gen(L k-1,min_sup);4)for each transaction t D{ //扫描D 用于计数5)C t = subset(C k,t);//得到t 的子集,它们是候选6)for each candidate c C t7)c.count++;8)}9)L k={c C k | c.count ≥ min_sup}10)}11)return L = k L k;Procedure apriori_gen (L k-1:frequent(k-1)-itemsets)1) for each itemsets l1L k-12) for each itemsets l2L k-13) if (l1[1]=l2[1])^ (l1[2]=l2[2])^…^(l1[k-2]=l2[k-2])^ (l1[k-1]<l2[k-1]) then{4) c=l1l2; // 连接步:产生候选5) if has_infrequent_subset(c,L k-1) then6) delete c; // 剪枝步:删除非频繁的候选7) else add c to C k;8) }9) return C k;Procedure has_infrequent_subset (c:candidate k-itemset;L k-1:frequent(k-1)-itemsets) //使用先验知识1)for each(k-1)-subset s of c2)If s L k-1 then3)return TRUE;4)return FALSE;2.1.4 Apriori算法评价基于频繁项集的Apriori算法采用了逐层搜索的迭代的方法,算法简单明了,没有复杂的理论推导,也易于实现。
但其有一些难以克服的缺点:(1)对数据库的扫描次数过多。
在Apriori算法的描述中,我们知道,每生成一个候选项集,都要对数据库进行一次全面的搜索。
如果要生成最大长度为N的频繁项集,那么就要对数据库进行N次扫描。
当数据库中存放大量的事务数据时,在有限的内存容量下,系统I/O负载相当大,每次扫描数据库的时间就会很长,这样其效率就非常低。
(2)Apriori算法会产生大量的中间项集。
Apriori_gen函数是用L k-1产生候选C k,所产生C k由个k项集组成。
显然,k越大所产生的候选k项集的数量呈几何级数增加。
如频繁1项集的数量为104个,长度为2的候选项集的数量将达到5*107个,如果要生成一个更长规则,其需要产生的候选项集的数量将是难以想象的,如同天文数字。
(3)采用唯一支持度,没有将各个属性重要程度的不同考虑进去。
在现实生活中,一些事务的发生非常频繁,而有些事务则很稀疏,这样对挖掘来说就存在一个问题:如果最小支持度阈值定得较高,虽然加快了速度,但是覆盖的数据较少,有意义的规则可能不被发现;如果最小支持度阈定得过低,那么大量的无实际意义的规则将充斥在整个挖掘过程中,大大降低了挖掘效率和规则的可用性。
这都将影响甚至误导决策的制定。
(4)算法的适应面窄。
该算法只考虑了单维布尔关联规则的挖掘,但在实际应用中,可能出现多维的、数量的、多层的关联规则。
这时,该算法就不再适用,需要改进,甚至需要重新设计算法。
2.1.5 Apriori算法改进鉴于Apriori算法本身存在一些缺陷,在实际应用中往往不能令人感到满意。
为了提高Apriori算法的性能,已经有许多变种对Apriori进一步改进和扩展。
可以通过以下几个方面对Apriori算法进行改进:①通过减少扫描数据库的次数改进I/O的性能。