FP-growth算法高效实现

FP-growth算法是一种用于高效挖掘频繁项集的算法,它改进了Apriori算法,通过FP树数据结构减少数据扫描次数。算法主要包括构建FP树和从FP树中挖掘频繁项集两个步骤。在Twitter文本流数据中,FP-growth首先构建FP树,然后通过抽取条件模式基和创建条件FP树来挖掘频繁项。该算法适用于搜索引擎的自动补全功能,帮助发现频繁出现的词对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:

  搜索引擎中,输入一个单词或者单词的一部分。搜索引擎就会自动补全查询的单词项。用户甚至实现都不知道搜索引擎推荐的东西是否存在。搜索引擎公司研究元需要查看互联网上的词找出经常出线一起的词对。

它是基于Apriori算法,但是比它快。这里的任务是将数据集存储在一个特定的FP树结构中发现频繁项集或者频繁项对。

过程简化如下:会两次扫描数据集

1)构建FP树

2)从FP树中挖掘频繁项集

下面的例子是:基于Twiter文本流中挖掘常用词


FP-growth算法就是将数据存储在一个称作FP树的紧凑的数据结构中。FP代表的是频繁模式。它通过link来链接相似的元素,被连起来的元素看作一个链表。同搜索树不同的是,一个元素项可以在FP树中出现很多次。FP树会存储项集的出线频率,而每个项集会以路径方式存储在树中。树节点上给出集合中单个元素以及序列的出线次数,路径会给出这个序列的出线次数。

相似项链接就是节点链接,用于快速发现相似项的位置。我们生成上图树的事务数据


FP-growth算法工作流程如下:首先构建FP树,对原始数据集合扫描两次。第一次所有元素出现次数进行计数,如果某个元素不频繁那么超集肯定不频繁。

第二遍只考虑那些频繁元素


FP树的数据结构

class treeNode:
    def __init__(self,nameValue,numOccur,parentNode):
        self.name = nameValue
        self.parent = parentNode
        self.count = numOccur
        self.nodeLink = None
        self.children={}
    def inc(self,numOccur):
        self.count+=numOccur
    #树文本形式打印
    def disp(self,ind=1):
        print ' '*ind,self.name, ' ',self.count
        for child in self.children.values():
            child.disp(ind+1)
    
我们测试一下这个数据结构

import fpGrowth

rootNode = fpGrowth.treeNode('pyramid',9,None)
rootNode.children['eye'] = fpGrowth.treeNode(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值