FP Ê Ó python Ê μ Ï Ö

Source: Internet
Author: User

FP Ê Ó python Ê μ Ï Ö

FP-growth fair Fair enough · r²» äüè ¥ · ~~ömá~~~~~~£?fp-growth ~~~~~~» ~~~~~~~~****************************** ¿â ½ ø Ð ááám'é éräzäzant=» ° Ç çé ¿öö Â Æ ä Ã ¨? apriori **************************************

WHY» Why? FP then *****************************************************************



Ú ú± ð µäê û ² Ç çø ± £ £;öö» Ç çöó óáááë à like Ú úμ ã μááá 'antóbarant£.

FP limit £° <limit · limit "http://www.bkjia.com/kf/ware/vc/" target = "_ blank" class = "keylink"> vcD4KPHA + PC9wPgo8cHJlIGNsYXNzPQ = "brush: java; "> class treeNode: def _ init _ (self, nameValue, numOccur, parentNode): self. name = nameValue self. count = numOccur self. nodeLink = None self. parent = parentNode self. children = {} def inc (self, numOccur): self. count + = numOccur def disp (self, ind = 1): print ''' * ind, self. name, '', self. count for child in self. children. values (): child. disp (ind + 1)

Disp () ° ¯ Ê Ö ö÷ Ç Ä ä± ¾ Ï Ê ¾ ³ ö Ö µ? £» mööê µà £ *****************************************************************



~Â ö ö~~~~~~~ä² ~~í ~çáá?fp ~~£%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%^' úâ £°

def createTree(dataSet, minSup=1): #create FP-tree from dataset but don't mine    headerTable = {}    #go over dataSet twice    for trans in dataSet:#first pass counts frequency of occurance        for item in trans:            headerTable[item] = headerTable.get(item, 0) + dataSet[trans]    for k in headerTable.keys():  #remove items not meeting minSup        if headerTable[k] < minSup:             del(headerTable[k])    freqItemSet = set(headerTable.keys())    #print 'freqItemSet: ',freqItemSet    if len(freqItemSet) == 0: return None, None  #if no items meet min support -->get out    for k in headerTable:        headerTable[k] = [headerTable[k], None] #reformat headerTable to use Node link     #print 'headerTable: ',headerTable    retTree = treeNode('Null Set', 1, None) #create tree    for tranSet, count in dataSet.items():  #go through dataset 2nd time        localD = {}        for item in tranSet:  #put transaction items in order            if item in freqItemSet:                localD[item] = headerTable[item][0]        if len(localD) > 0:            orderedItems = [v[0] for v in sorted(localD.items(), key=lambda p: p[1], reverse=True)]            updateTree(orderedItems, retTree, headerTable, count)#populate tree with ordered freq itemset    return retTree, headerTable #return tree and header tabledef updateTree(items, inTree, headerTable, count):    if items[0] in inTree.children:#check if orderedItems[0] in retTree.children        inTree.children[items[0]].inc(count) #incrament count    else:   #add items[0] to inTree.children        inTree.children[items[0]] = treeNode(items[0], count, inTree)        if headerTable[items[0]][1] == None: #update header table             headerTable[items[0]][1] = inTree.children[items[0]]        else:            updateHeader(headerTable[items[0]][1], inTree.children[items[0]])    if len(items) > 1:#call updateTree() with remaining ordered items        updateTree(items[1::], inTree.children[items[0]], headerTable, count)        def updateHeader(nodeToTest, targetNode):   #this version does not use recursion    while (nodeToTest.nodeLink != None):    #Do not use recursion to traverse a linked list!        nodeToTest = nodeToTest.nodeLink    nodeToTest.nodeLink = targetNode
2. Please refer to the comment below × ******************************************************** headerTable guímoçí ö¸ ë ± ±í£%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% · ± Ï î ¼ öð Ó µ μ Ö ×ö× ± £ ££ â À Ó Ò» Ð µ μ ï ö¸ ~~ú~« Î £;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%â ú× ã × µ µíö§ Ö öant=£%ö± ½ Ó É µ μ ²» ó~~~~~~~£updatetree () ° too many bytes before ± ¸ ü Ð Â £ £%%updateheader () Ç ¬» then headerTable Í ö¸ %%%%± í %£

Ó Ò» ¿Ã FP Ê öð íú¾ ò µ?

class treeNode :    def __init__(self,nameValue,numOccur,parentNode):        self.name = nameValue        self.count = numOccur        self.nodeLink = None        self.parent = parentNode        self.children = {}    def inc (self,numOccur):        self.count += numOccur            def disp(self,ind = 1):        print ' '*ind,self.name,'  ',self.count        for child in self.children.values():            child.disp(ind+1)def createTree(dataSet,minSup=1):    headerTable = {}    for trans in dataSet:        for item in trans:            headerTable[item] = headerTable.get(item,0)+ dataSet[trans]    for k in headerTable.keys():        if headerTable[k] < minSup:            del(headerTable[k])      freqItemSet = set(headerTable.keys())    if len(freqItemSet) == 0 : return None,None    for k in headerTable:        headerTable[k] = [headerTable[k],None]    retTree = treeNode('Null Set',1,None)    for tranSet ,count in dataSet.items():        localD = {}        for item in tranSet:            if item in freqItemSet:                localD[item] = headerTable[item][0]        if len(localD) > 0:            orderedItems = [v[0] for v in sorted(localD.items(),key = lambda p:p[1],reverse = True)]            updateTree(orderedItems,retTree,headerTable,count)    return retTree,headerTabledef updateTree(items,inTree,headerTable,count):    if items[0] in inTree.children:        inTree.children[items[0]].inc(count)    else:        inTree.children[items[0]] = treeNode(items[0],count,inTree)        if headerTable[items[0]][1] ==None:            headerTable[items[0]][1] = inTree.children[items[0]]        else:            updateHeader(headerTable[items[0]][1], inTree.children[items[0]])    if len(items) > 1:        updateTree(items[1::], inTree.children[items[0]], headerTable, count)        def updateHeader(nodeToTest,targetNode):    while (nodeToTest.nodeLink !=  None):        nodeToTest = nodeToTest.nodeLink    nodeToTest.nodeLink = targetNode    def loadSimpDat():    simpDat = [['r', 'z', 'h', 'j', 'p'],               ['z', 'y', 'x', 'w', 'v', 'u', 't', 's'],               ['z'],               ['r', 'x', 'n', 'o', 's'],               ['y', 'r', 'x', 'z', 'q', 't', 'p'],               ['y', 'z', 'x', 'e', 'q', 's', 't', 'm']]    return simpDatdef createInitSet(dataSet):    retDict = {}    for trans in dataSet:        retDict[frozenset(trans)] = 1    return retDictdef ascendTree(leafNode,prefixPath):    if leafNode.parent !=None:        prefixPath.append(leafNode.name)        ascendTree(leafNode.parent, prefixPath)def findPrefixPath(basePat,treeNode):    condPats={}    while treeNode != None:        prefixPath = []        ascendTree(treeNode, prefixPath)        if len(prefixPath) > 1:            condPats[frozenset(prefixPath[1:])] = treeNode.count        treeNode = treeNode.nodeLink    return condPatsdef mineTree(inTree,headerTable,minSup,preFix,freqItemList):    bigL = [v[0] for v in sorted(headerTable.items(),key=lambda p:p[1])]    for basePat in bigL:        newFreqSet = preFix.copy()        newFreqSet.add(basePat)        freqItemList.append(newFreqSet)        condPattBases = findPrefixPath(basePat, headerTable[basePat][1])        myCondTree,myHead = createTree(condPattBases, minSup)         if myHead!= None:            print 'conditional tree for: ',newFreqSet            myCondTree.disp(1)             mineTree(myCondTree, myHead, minSup, newFreqSet, freqItemList)   if __name__ == "__main__":    simpDat = loadSimpDat()    print simpDat    initSet = createInitSet(simpDat)    print initSet    myFPtree , myHeaderTab = createTree(initSet, 3)    myFPtree.disp()    print findPrefixPath('t', myHeaderTab['t'][1])    freqItems = []    mineTree(myFPtree, myHeaderTab, 3, set([]), freqItems)    print freqItems    

Ê ämömámím=£°

[['r', 'z', 'h', 'j', 'p'], ['z', 'y', 'x', 'w', 'v', 'u', 't', 's'], ['z'], ['r', 'x', 'n', 'o', 's'], ['y', 'r', 'x', 'z', 'q', 't', 'p'], ['y', 'z', 'x', 'e', 'q', 's', 't', 'm']]{frozenset(['e', 'm', 'q', 's', 't', 'y', 'x', 'z']): 1, frozenset(['x', 's', 'r', 'o', 'n']): 1, frozenset(['s', 'u', 't', 'w', 'v', 'y', 'x', 'z']): 1, frozenset(['q', 'p', 'r', 't', 'y', 'x', 'z']): 1, frozenset(['h', 'r', 'z', 'p', 'j']): 1, frozenset(['z']): 1}  Null Set    1   x    1    s    1     r    1   z    5    x    3     y    3      s    2       t    2      r    1       t    1    r    1{frozenset(['y', 'x', 's', 'z']): 2, frozenset(['y', 'x', 'r', 'z']): 1}conditional tree for:  set(['y'])  Null Set    1   x    3    z    3conditional tree for:  set(['y', 'z'])  Null Set    1   x    3conditional tree for:  set(['s'])  Null Set    1   x    3conditional tree for:  set(['t'])  Null Set    1   y    3    x    3     z    3conditional tree for:  set(['x', 't'])  Null Set    1   y    3conditional tree for:  set(['z', 't'])  Null Set    1   y    3    x    3conditional tree for:  set(['x', 'z', 't'])  Null Set    1   y    3conditional tree for:  set(['x'])  Null Set    1   z    3[set(['y']), set(['y', 'x']), set(['y', 'z']), set(['y', 'x', 'z']), set(['s']), set(['x', 's']), set(['t']), set(['y', 't']), set(['x', 't']), set(['y', 'x', 't']), set(['z', 't']), set(['y', 'z', 't']), set(['x', 'z', 't']), set(['y', 'x', 'z', 't']), set(['r']), set(['x']), set(['x', 'z']), set(['z'])]



Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.