关联规则挖掘算法AFPIM

参考文献来自An Efficient Approach for Maintaining Association Rules  based on Adjusting FP-tree Structure

Jia-Ling Koh and Shui-Feng Shieh  Department of Information and Computer Education

其中有大量的删减,如果想直奔主题,看干货,可直接从3、调整FP_tree的策略 开始看起@OUYM

1、Introduction

数据挖掘在数据库研究中引起了广泛的关注,因为它在许多领域中有着广泛应用。 在各种数据挖掘应用中,客户交易中的挖掘关联规则是重要的。客户交易记录通常由客户ID,交易时间和交易中购买的所有项目组成。这种数据库的挖掘关联规则是找出所有的规则,如“购买项目X和Y的客户中有n%的人在同一交易中也购买项目Z”,其中n,X,Y,Z最初是未知的。 这样的规则对于定制营销的决策是有用的。

已经提出了几种有效的算法用于寻找频繁项集,并且关联规则是从频繁项集推导出来的,如Apriori和DHP算法。这些“类Apriori”的算法受到(1)处理大量候选集(2)重复扫描数据库的限制。 韩家炜提出了一种频繁模式树(FP-tree)结构,用于存储关于频繁模式压缩结构和关键信息。此外,开发了一种称为FP-Growth的算法,用于从FP-tree中挖掘完整的频繁项集。这种方法避免了大量的候选集的产生和重复的数据库扫描的代价,这被认为是挖掘频繁项集的最有效的策略。

事务数据库的更新可能会使现有规则无效或引入新规则。更新“关联规则”以便更快的在更新的数据库中找到新的频繁项集集合。更新关联规则的一个简单的解决方案是重新挖掘整个更新的数据库。然而,这种方法的无效性(或者说效率底下)是显而易见的,因为在以前的挖掘中完成的所有计算都是浪费的。有人研究了如何者保留先前发现的关联规则,并在此基础上更新新的关联规则,提出了在添加新的事务数据时增加更新关联规则的FUP算法。为了解决一般情况的问题,包括数据库中事务的插入,删除和修改,FUP算法被修改并开发出FUP2算法。还有人提出了一种类似于FUP算法的增量更新技术,用于挖掘多层次关联规则。作为“类Apriori“的算法,所有FUP系列都必须产生大量的候选,并反复扫描数据库。

除了频繁项目集之外,有人提出的增量更新技术还保留了附加信息。有人提出了一种增量挖掘算法,用于寻找频繁的序列模式。在该算法中保留了前序列,其是具有较低支持阈值和上限阈值之间的支持的序列。需要从重新扫描原始数据库时确定的下限阈值和上限阈值派生的绑定。在另一个算法中,负边界与频繁项集保持一致。 如果将负边界外的项目集添加到频繁项集或其负边界,则该算法需要对整个数据库进行全面扫描。

在本文中,我们提出一种称为AFPIM(增量挖掘调整FP-tree)的算法,以便事务数据库在添加,删除或修改新事务时,以最小的计算量来有效地查找新的频繁项集。 在我们的方法中,原始数据库的FP-tree结构除了频繁项目集之外都被维护。 在大多数情况下,不需要重新扫描整个数据库,通过根据插入和删除的事务调整之前的FP-tree来获得更新的数据库的FP-tree结构。 然后从新的FP-tree结构中挖掘更新数据库的频繁项集,并发现相应的关联规则。

2、Problem Dwscription

基本概念:

在本文中,应用了“前序列“(pre-large sequences)的概念。除了最小支持阈值之外,还指定了一个较小的阈值,称为”预最低支持“(pre-minimum support)。对于数据库中的每个项目X,如果其支持计数不小于最小支持,则将X命名为频繁项。如果X的支持次数小于最小支持,并且不低于”预最低支持“,则X称为“预先频繁项”。否则,X是非频繁的项目。在以下情况下,频繁项目和预先频繁项目被命名为“频繁或预先频繁项”。

为了有效解决更新问题,我们在挖掘原始数据库DB后维护以下信息。

1.数据库中的所有项目以及数据库中的支持计数。

2.数据库的FP树,根据DB中的频繁或预先频繁的项目构建。

DB中的项目X是频繁的,预先频繁(pre-frequent)或在频繁(in-frequents)的项目,它们将成为UD中的频繁,预先频繁或在频繁的项目。

3、调整FP_tree的策略:

原始数据库DB。 最小支持为0.2,预先最小支持(pre-minimum support)为0.15。A:2,B:6,C:5,D:3,E:4,F:7,G:1和H:1(:表示支持计数)。支持的项目不小于2(即13×0.15 = 1.95)是DB中的频繁或预先频繁的项目。 因此,A,B,C,D,E和F是DB中的频繁项。 在按顺序排列所有频繁或预先频繁的项目后,结果为F:7,B:6,C:5,E:4,D:3和A:2。然后插入5个事务,并从DB中删除3个事务。db +和db-中的所有项目的支持计数都在上面。对于UD中的每个项目X,支持数可以通过简单的计算获得。 结果是A:2,B:9,C:5,D:7,E:6,F:8,G:1和H:2。在新数据库UD中,预先频繁或频繁的项目必须具有不少于3的支持计数。因此,以频率递减顺序显示的UD中频繁或频繁的1项集是B:9,F:8,D:7,E:6和C:5。

删除非频繁节点:

假设项目I在UD中非频繁,表示I的节点必须从FP树中删除。 从项目I开始,在FP-tree头部和跟随I节点链接之后,可以逐个获得表示I的所有节点。 对于每个节点N,使得N.item-name = I,将其子节点设置为其父节点的子节点,并从I节点链路中删除N。 最后,删除标题表中的I条目。A在UD中不是频繁的或预先频繁的项目。
因此,表示A的节点从FP树中移除。

DB中支持数降序的频繁或预先频繁项目的列表,应用冒泡排序算法来确定在UD中满足相邻项目的支持降序的交换方式。 如上图所示,需要进行4次交换,以调整DB中的支持降序以符合UD中的顺序。 在决定要交换的项目对之后,在DB的FP-tree中,必须调整包含一对交换项目的路径。 调整方法如下所述。假设在DB的FP-tree中存在路径,其中节点Y是节点X的子节点,并且必须交换节点X和Y中表示的项目。
另外,节点P是X的父节点。如果X.count大于Y.count,执行步骤1到3。 否则,执行步骤2到3。

【步骤1】插入: 插入节点P的子节点X‘,其中X‘.count设置为X.count
- Y.count。 X除了节点Y的所有子节点都被分配为X‘的子节点。 另外,X.count被重置为等于Y.count。

【步骤2】交换:分别交换节点X和节点Y的父链接和子链路。

【步骤3】合并:检查是否存在P节点,表示为节点Z,Z.item-name = Y.item-name。 如果节点Z存在,则将Z.count相加到Y.count中,并且删除节点Z。

第一次迭代调整:项目F和B的交换节点

从FP-tree的头表中,可以获得项目F的节点链接。先来把携带项目名称F的节点被表示为节点X,存在X的子节点Y,使得名称为B。因此,执行调整方法。

(1)插入:对于X的父节点,在这种情况下,根节点插入一个子节点

节点X‘携带项目名称F. X‘的计数字段分配为2,(即7-5)。此外,X.count被重新分配为等于Y.count,5。最后,将X‘插入到F的节点链接中。

(2)交换:交换节点X和节点Y。

(3)合并:存在根节点的另一个子节点Z,使得“Z”携带与”Y”相同的项目名称B。因此,在节点中的计数值Z被合并到节点Y中,Z被去除。

得到携带项目名称F的下一个节点。但是,该节点没有名称为B的子节点,因此已到达项目F的节点链接的终端,这个迭代是完整的;

第二次调整迭代:项目C和E的交换节点

与第一次迭代的过程类似,携带项目名称C的第一个节点是表示为节点X,并且发现其携带项目名称E的子节点Y。
然后进行调整方法。 在这种情况下,节点X除节点Y之外还有另一个子节点S.因此,节点S被分配为新添加的节点X‘的子节点;

第三次调整:项目C和D的交换节点

携带项目名称C的第一个节点及其子节点携带项目名称D.,分别表示为节点X和Y在这种情况下,X.count等于Y.count。 因此,只有步骤2和步骤3进行调整方法。下一组项目C和D的节点,表示为节点X和Y执行调整方法并进行交换标题表中项目F和B的条目;

第四次迭代调整:项目E和D的交换节点。

4、插入或者删除数据:

在FP-tree里面调整节点的路径后,所得FP-tree中的每个路径都遵循UD中频繁或前缀频繁项的频率降序。 对于db +中的每个事务T,选择T中包含的UD的频繁或预先频繁的项目,并按降序排序。
事务T将被插入到FP-tree中作为构建FP-tree的过程。 同样,每个事务T在db-从FP树中删除。

5、AFPIM算法:

基于上述描述的策略,我们有以下AFPIM算法调整增量挖掘频繁项集的FP-tree结构。

【步骤1】阅读DB中的项目及其DB中的支持计数。

【步骤2】扫描数据库db+和db- 一次,分别列出在db+和db-所有项目及其支持数。对于每个项目X,计算UD中的X的支持计数根据公式:

然后在UD中收集频繁或预先频繁的项目。

【步骤3】判断是否所有的UD频繁项目是否都在DB的FP-tree中覆盖。

【步骤3.1】如果在FP-tree中存在UD的频繁项目,则整个UD需要要扫描一次,以便根据频繁重建UD的FP树或UD中的前缀项目。

【步骤3.2】否则,读入存储的数据库的FP-tree。

【步骤3.2.1】对于UD中的每个不频繁的项目,从中删除相应的节点FP树。

【步骤3.2.2】根据DB和UD中的支持数降序的排列顺序,应用冒泡排序算法来交换项目顺序。然后重复使用路径调整方法来调整结构FP-tree中的路径。

【步骤3.2.3】扫描数据库db+ 和db- 第二次,调用函数tree_insert_delete插入事务db+和删除事务db- 。最后,得到了所得到的UD的FP树。

【步骤4】应用FP-Growth算法和TD-FP-Growth算法分别从UD的FP树中找出UD中的频繁项集

伪代码:

 

时间: 2024-08-10 03:14:25

关联规则挖掘算法AFPIM的相关文章

关联规则挖掘算法综述

摘  要  本文介绍了关联规则的基本概念和分类方法,列举了一些关联规则挖掘算法并简要分析了典型算法,展望了关联规则挖掘的未来研究方向. 关键词  数据挖掘,关联规则,频集,Apriori算法,FP-树 1 引言 关联规则挖掘发现大量数据中项集之间有趣的关联或相关联系.它在数据挖掘中是一个重要的课题,最近几年已被业界所广泛研究. 关联规则挖掘的一个典型例子是购物篮分析.关联规则研究有助于发现交易数据库中不同商品(项)之间的联系,找出顾客购买行为模式,如购买了某一商品对购买其他商品的影响.分析结果可

FP-Tree -关联规则挖掘算法

在关联规则挖掘领域最经典的算法法是Apriori,其致命的缺点是需要多次扫描事务数据库.于是人们提出了各种裁剪(prune)数据集的方法以减少I/O开支 本文参考地址:http://www.cnblogs.com/zhangchaoyang/articles/2198946.html

关联规则挖掘算法

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; namespace Apriori {     //事务     struct trans     {        

不产生候选集的关联规则挖掘算法FP-Tree

上篇博客讲述了Apriori算法的思想和java实现,http://blog.csdn.net/u010498696/article/details/45641719 Apriori算法是经典的关联规则算法,但是如上篇博客所述,它也有两个致命的性能瓶颈,一个是频繁集自连接产生候选集这一步骤中可能产生大量的候选集:另一个是从候选集得到频繁项集需要重复扫描数据库. 2000年,Han等提出了一个称为FP-tree的算法,有效解决了以上两个问题,它只需要扫描数据库2次,并不使用候选集,通过构造一棵频繁

Apriori算法--关联规则挖掘

我的数据挖掘算法代码:https://github.com/linyiqun/DataMiningAlgorithm 介绍 Apriori算法是一个经典的数据挖掘算法,Apriori的单词的意思是"先验的",说明这个算法是具有先验性质的,就是说要通过上一次的结果推导出下一次的结果,这个如何体现将会在下面的分析中会慢慢的体现出来.Apriori算法的用处是挖掘频繁项集的,频繁项集粗俗的理解就是找出经常出现的组合,然后根据这些组合最终推出我们的关联规则. Apriori算法原理 Aprio

数据挖掘算法之关联规则挖掘(一)---apriori算法

关联规则挖掘算法在生活中的应用处处可见,几乎在各个电子商务网站上都可以看到其应用 举个简单的例子 如当当网,在你浏览一本书的时候,可以在页面中看到一些套餐推荐,本书+有关系的书1+有关系的书2+...+其他物品=多少¥ 而这些套餐就很有可能符合你的胃口,原本只想买一本书的你可能会因为这个推荐而买了整个套餐 这与userCF和itemCF不同的是,前两种是推荐类似的,或者你可能喜欢的商品列表 而关联规则挖掘的是n个商品是不是经常一起被购买,如果是,那个n个商品之中,有一个商品正在被浏览(有被购买的

增量关联规则挖掘—FUP算法

一.背景介绍 关联规则( Association rule)概念最初由Agrawal提出,是数据挖掘的一个重要研究领域, 其目的是发现数据集中有用的频繁模式. 静态关联规则挖掘,是在固定数据集和支持度下,发现数据集中的频繁项集,如 Apriori.FP-Growth.Ecalt等.现实问题中,多数时候,支持度和数据集是会发生变化的,Cheung提出了FUP (Fast UPdate)算法,主要针对数据集增大的情况,FUP算法是第一个增量关联规则挖掘算法. 二.相关定义 数据集DB = {T1,T

浅谈数据挖掘中的关联规则挖掘

数据挖掘是指以某种方式分析数据源,从中发现一些潜在的有用的信息,所以数据挖掘又称作知识发现,而关联规则挖掘则是数据挖掘中的一个很重要的 课题,顾名思义,它是从数据背后发现事物之间可能存在的关联或者联系.举个最简单的例子,比如通过调查商场里顾客买的东西发现,30%的顾客会同时购买床 单和枕套,而购买床单的人中有80%购买了枕套,这里面就隐藏了一条关联:床单—>枕套,也就是说很大一部分顾客会同时购买床单和枕套,那么对于商 场来说,可以把床单和枕套放在同一个购物区,那样就方便顾客进行购物了.下面来讨论

分布式并行关联规则挖掘

经典的关联规则挖掘算法Apriori和FP-growth,在大数据或者海量数据面前,由于候选集和生成的FP树大而无法存储到内存,同时也由于算法本身单机的特点,决定了它串行处理数据的方式,这在效率上很难满足大数据处理的要求,数据迁移到平台需要传输和转储,在大数据面前,也是一大难题. 一般而言"关联规则的挖掘过程分为两步 1 找出所有的频繁项集,根据定义这些项集的每一个频繁出现次数至少与预定义的最小支持度计数 2 由频繁项集产生强关联规则.这些规则必须满足最小支持度和最小置信度. 由于第二步的开销远