数据挖掘 关联规则的FP-growth-tree(FP增长树)的python实现(二)

数据挖掘 关联规则的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

原理就将那么多啦,下一篇介绍如何使用。

你可能感兴趣的:(数据挖掘)