第12章 使用FP-growth算法来高效发现频繁集

FP-growth算法将数据集存储在一个特定的称作FP树的结构之后发现频繁项集或者频繁项集对,即常在一起出现的元素项的集合FP树。这种做法使得算法的执行速度要快于Apriori算法,性能要好两个数量级以上。

FP-growth算法只需要对数据集记性两次扫描就能判定给定模式是否频繁,当数据库特别大时其优势越明显。但是这种算法不能用来发现关联规则。它发现频繁项集的过程:(1)构建FP树(2)从FP树中挖掘频繁项集。

12.1  FP树:用于编码数据集的有效方式

FP-growth算法将数据存储在一种称为FP树的紧凑数据结构中。FP代表频繁模式(Frequent Pattern)。

同搜索树不同的是,一个元素项可以在一棵FP树中多次出现。FP树会存储项集的出现频率,而每个项集会以路径的方式存储在树中。存在相似元素的集合会共享树的一部分。只有当集合之间完全不同时,树才会分叉。树节点上给出集合中单个元素及其在序列中出现的次数,路径会给出该序列的出现次数。相似项之间的链接叫做节点链接,用于快速发现相似项的位置。

FP-growth算法工作流程如下:首先构建FP树,然后利用它来挖掘频繁项集。为构建FP树,需要对原始数据集扫描两遍。第一遍对所有元素项的出现次数进行统计,如果某元素是不频繁的,那么它的超集也是不频繁的。数据库第一遍扫描用来统计出现的频率,第二遍扫描中只考虑那些频繁的元素。

12.2  构建FP树

12.2.1  创建FP树的数据结构


FP树的数据结构

12.2.2  构建FP树

这里使用一个字典作为数据结构,来保存头指针表。除了存放指针外,头指针表还可以用来保存FP树中每个元素是总数。

第一次遍历数据集会获得每个元素项的出现频率。接下来,去掉不满足最小支持度的元素项。在下一步构建FP树。在构建时,读入每个项集并将其添加到一条已经存在的路径中。如果该路径不存在,则创建一条新路径。每个事务都是一个无序集合。在将集合添加到树之前,需要对每个集合排序。排序基于元素项的绝对出现频率进行。在对事务记录过滤和排序之后,就可以侯建FP树了。从空集开始,向其中不断添加频繁项集。过滤、排序后的事务依次添加到树中。如果树中已存在现有元素,则增加现有元素的值。如果现有元素不存在,则向树添加一个分枝。

FP树

上面给的是元素项及其对应的频率计数值,其中每个缩进表示所处的树的深度。

12.3  从一棵FP树中挖掘频繁项集

有了FP树之后,就可以抽取频繁项集了。首先从单元素项集合开始,然后在此基础上逐步构建更大的集合。

从FP树中抽取频繁项集的三个基本步骤:(1)从FP树中获得条件模式基;(2)利用条件模式基,构建一个条件FP树;(3)迭代重复步骤1和2 ,直到树包含一个元素项为止。

我们重点关注步骤(1),即寻找条件模式基。之后,为每一个条件模式基创建对应的条件FP树。最后构造少许代码封装上述两个函数,并从FP树中获得频繁项集。

12.3.1  抽取条件模式基

首先从上一节发现的已经保存在头指针表中的单个频繁元素项开始。对于每一个元素项,获得其对应的条件模式基(conditional pattern base)。条件模式基是以所查找元素项为结尾的路径集合。每一条路径其实都是一条前缀路径(prefix path)。简而言之,一条前缀路径是介于所查找元素项与根节点之间的所有内容。

每一条前缀路径都与一个计数值关联。前缀路径将用于构建条件FP树。为了获得这些前缀路径,可以对树进行穷举式搜索,直到获得想要的频繁项为止,或者使用一个更有效的方法来加速搜索过程。可以利用先前创建的头指针表来得到一种更有效的方法。头指针表包含相同类型元素链表的起始指针。一旦到达了每一个元素项,就可以上溯这棵树直到根节点为止。

构建树的实际效果

有了条件模式基,就可以创建条件FP树。

12.3.2  创建条件FP树

对每个频繁项,都要创建一棵条件FP树。我们可以使用刚才发现的条件模式基作为输入数据,并通过相同的建树代码来构架这些树。然后,我们会递归地发现频繁项、发现条件模式基,以及发现另外的条件树。

12.4  本章小结

FP-growth算法是一种用于发现数据集中频繁模式的有效方法。FP-growth算法利用Apriori算法的原则,但只对数据集扫描两次,执行更快。在FP-growth算法中,数据集存储在一个称为FP树的结构中。FP树构建完成后,可以通过查找元素项的条件基及构建条件树来发现频繁项集。该过程不断以更多元素作为条件重复进行,直到FP树中只包含一个元素为止。

使用FP-growth算法可以在多种文本文档中查找频繁单词,本文没有实践和记录实例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容