数据挖掘 关联规则的FP-growth-tree(FP增长树)的python实现(二)
上篇补充
将节点的数据结构补充一下,我的树的每个节点node定义在node.py文件中,代码如下
#-*- coding:utf-8 –*-
__author__ = 'Dodd'
class node:
def __init__(self,name,parent):
self.name=name #储存当前结点的内容项
self.parent=parent #储存父亲节点的引用
self.child=[] #储存孩子节点引用的数组
self.next=None #储存头表
self.count=0 #储存权值
pass
算法2.FP-Grow
输入:建好的树,树的头表
输出:没有输出,递归调用建树,在函数运行过程中将答案加入集合中
伪代码:
FP_growth(树,头表):
if 这颗树里只有一条路径
将这个路径上的所有组合加入答案集中
else:
for t in 头表:
#datas为条件模式基
datas=头表中的每个路径生成条件模式基,格式和给的最初的数据集一样,这样就可以递归的调用建该条件模式基树的过程
调用getFPTree(S,datas)构建当前的模式基的子树
将当前一项频繁的集并上前置加入答案集中
上述的过程是我自己写的,可能不是非常好,想要更详细的描述请参考,数据挖掘黑皮书。
算法3.获取一条路径上的所有组合
python代码:
输入:头表,前置项集,最小支持度
输出:直接将答案存入答案集合中
def generateCombination(headtable,a,support):
lis=[]
lisc=[]
ans=[]
base=str(",".join(str(i) for i in a))
for x in headtable.keys():
if(headtable[x].count>=support):
lis.append(x)
lenlis=len(lis)
#获取从2到lenlist+1个数的所有组合
for i in range(2,lenlis+1):
lisc+=list(combinations(lis,i))
st=None
#重复每一个组合的支持度,将其加入返回的数据集中
for x in lisc:
count=999
st=base
if x:
for i in x:
st=st+","+i
count=min(count,headtable[i].count)
pass
if st:
ans.append((st,count))
return ans
原理就将那么多啦,下一篇介绍如何使用。