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