事实证明想要优化一个算法要付出巨大的努力,甚至要将原本的算法推倒重来,FP-growth让我深刻的理解了这一点,为了改进Apriori算法(仅仅提高两个数量级)就要放弃原本算法思想很简单的算法,强行去构造一颗让人捉摸不透的树,并采用迭代递归得到频繁集,而且这种算法不能和Apriori算法一样可以发现关联规则。下面是具体的算法实现。
(一)创建FP树的数据结构
class fpleave:
def __init__(self,name,count,parent):
self.name=name
self.count=count
self.parent=parent
self.children={}
def add(self,num):
self.count+=num
类中存放节点名字的变量和一个计数值,parent存放父节点,children存在子集。
(二)事物数据集的处理
通常包括移除非频繁项和排序:
def filter(data,num):
dic={}
ListOK=[]
D=[]
haha=[]
for i in data:
for j in i:
if j not in dic:
dic[j]=1