用python构造FP Tree

关联分析算法

关联分析算法是用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策。比如在常见的超市购物数据集,或者电商的网购数据集中,如果我们找到了频繁出现的数据集,那么对于超市,我们可以优化产品的位置摆放,对于电商,我们可以优化商品所在的仓库位置,达到节约成本,增加经济效益的目的。
本文将介绍关联分析算法中的一种算法----FP Tree。

FP Tree

假设我们已经有一个足够庞大的数据库,记录了每个消费的购买商品的记录,那么,如果我们现在要去找商品A与商品B的关联程度,或者说商品A与那些商品经常被一起购买诸如此类的挖掘,是否意味着每一次的计数都要遍历整个数据库来得到我们想要的结果呢,每次都需要多次扫描数据的话,I/O是很大的瓶颈。
为了减少I/O次数,FP Tree算法引入了一些数据结构来临时存储数据。

组成

整个数据结构由3个部分组成,如下图所示。
在这里插入图片描述

首先我们一开始所拥有的数据是表中的原始数据,通过对数据中的每一个商品的数量做出统计,得到项头表,比如上图中B在所有10组数据中出现了8次,因此排在第一位。然后我们通过这些数据来构建FP Tree,如图,并且依据项头表的项来建立链表,以供后续的查询。

class FP_Tree:
    class Node:###树的结构
        def __init__(self,parent,element):
            self.parent = parent
            self.children = []
            self.count = 0
            self.element = element

    class Chain:###链表
        class chain:####链表的结构
            def __init__(self,node,next):
                self.node = node
                self.next = next

        def __init__(self):
            self.head = None
            self.tail = None
            self.size = 0

        def __iter__(self):
            now = self.head
            yield now
            NEXT = now.next
            count = 0
            while count < self.size-1:
                now = NEXT
                NEXT = now.next
                count += 1
                yield now

        def push(self, e):
            if self.size == 0:
                self.head = self.chain(e, e)
                self.tail = self.head
            else:
                self.head = self.chain(e, self.head)
                self.tail.next = self.head
            self.size += 1

    def __init__(self,data)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值