欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

FP-growth算法發(fā)現(xiàn)頻繁項(xiàng)集——發(fā)現(xiàn)頻繁項(xiàng)集

 更新時間:2021年06月24日 16:40:47   作者:我是8位的  
常見的挖掘頻繁項(xiàng)集算法有兩類,一類是Apriori算法,另一類是FP-growth。Apriori通過不斷的構(gòu)造候選集、篩選候選集挖掘出頻繁項(xiàng)集,需要多次掃描原始數(shù)據(jù),當(dāng)原始數(shù)據(jù)較大時,磁盤I/O次數(shù)太多,效率比較低下

上篇介紹了如何構(gòu)建FP樹,F(xiàn)P樹的每條路徑都滿足最小支持度,我們需要做的是在一條路徑上尋找到更多的關(guān)聯(lián)關(guān)系。

抽取條件模式基

首先從FP樹頭指針表中的單個頻繁元素項(xiàng)開始。對于每一個元素項(xiàng),獲得其對應(yīng)的條件模式基(conditional pattern base),單個元素項(xiàng)的條件模式基也就是元素項(xiàng)的關(guān)鍵字。條件模式基是以所查找元素項(xiàng)為結(jié)尾的路徑集合。每一條路徑其實(shí)都是一條前輟路徑(perfix path)。簡而言之,一條前綴路徑是介于所査找元素項(xiàng)與樹根節(jié)點(diǎn)之間的所有內(nèi)容。

下圖是以{s:2}或{r:1}為元素項(xiàng)的前綴路徑:

{s}的條件模式基,即前綴路徑集合共有兩個:{{z,x,y,t}, {x}};{r}的條件模式基共三個:{{z}, {z,x,y,t}, {x,s}}。

尋找條件模式基的過程實(shí)際上是從FP樹的每個葉子節(jié)點(diǎn)回溯到根節(jié)點(diǎn)的過程。我們可以通過頭指針列表headTable開始,通過指針的連接快速訪問到所有根節(jié)點(diǎn)。下表是上圖FP樹的所有條件模式基:

創(chuàng)建條件FP樹

為了發(fā)現(xiàn)更多的頻繁項(xiàng)集,對于每一個頻繁項(xiàng),都要創(chuàng)建一棵條件FP樹。可以使用剛才發(fā)現(xiàn)的條件模式基作為輸入數(shù)據(jù),并通過相同的建樹代碼來構(gòu)建這些樹。然后,遞歸地發(fā)現(xiàn)頻繁項(xiàng)、發(fā)現(xiàn)條件模式基,以及發(fā)現(xiàn)另外的條件樹。

以頻繁項(xiàng)r為例,構(gòu)建關(guān)于r的條件FP樹。r的三個前綴路徑分別是{z},{z,x,y,t},{x,s},設(shè)最小支持度minSupport=2,則y,t,s被過濾掉,剩下{z},{z,x},{x}。y,s,t雖然是條件模式基的一部分,但是并不屬于條件FP樹,即對于r來說,它們不是頻繁的。如下圖所示,y→t→r和s→r的全局支持度都為1,所以y,t,s對于r的條件樹來說是不頻繁的。

過濾后的r條件樹如下:

重復(fù)上面步驟,r的條件模式基是{z,x},{x},已經(jīng)沒有能夠滿足最小支持度的路徑, 所以r的條件樹僅有一個。需要注意的是,雖然{z,x},{x}中共存在兩個x,但{z,x}中,z是x的父節(jié)點(diǎn),在構(gòu)造條件FP樹時不能直接將父節(jié)點(diǎn)移除,僅能從子節(jié)點(diǎn)開始逐級移除。

代碼如下

def ascendTree(leafNode, prefixPath):
    if leafNode.parent != None:
        prefixPath.append(leafNode.name)
        ascendTree(leafNode.parent, prefixPath)
def findPrefixPath(basePat, headTable):
    condPats = {}
    treeNode = headTable[basePat][1]
    while treeNode != None:
        prefixPath = []
        ascendTree(treeNode, prefixPath)
        if len(prefixPath) > 1:
            condPats[frozenset(prefixPath[1:])] = treeNode.count
        treeNode = treeNode.nodeLink
    return condPats
def mineTree(inTree, headerTable, minSup=1, preFix=set([]), freqItemList=[]):
    # order by minSup asc, value asc
    bigL = [v[0] for v in sorted(headerTable.items(), key=lambda p: (p[1][0],p[0]))]
    for basePat in bigL:
        newFreqSet = preFix.copy()
        newFreqSet.add(basePat)
        freqItemList.append(newFreqSet)
        # 通過條件模式基找到的頻繁項(xiàng)集
        condPattBases = findPrefixPath(basePat, headerTable)
        myCondTree, myHead = createTree(condPattBases, minSup)
        if myHead != None:
            print('condPattBases: ', basePat, condPattBases)
            myCondTree.disp()
            print('*' * 30)
            mineTree(myCondTree, myHead, minSup, newFreqSet, freqItemList)
simpDat = loadSimpDat()
dictDat = createInitSet(simpDat)
myFPTree,myheader = createTree(dictDat, 3)
myFPTree.disp()
condPats = findPrefixPath('z', myheader)
print('z', condPats)
condPats = findPrefixPath('x', myheader)
print('x', condPats)
condPats = findPrefixPath('y', myheader)
print('y', condPats)
condPats = findPrefixPath('t', myheader)
print('t', condPats)
condPats = findPrefixPath('s', myheader)
print('s', condPats)
condPats = findPrefixPath('r', myheader)
print('r', condPats)
mineTree(myFPTree, myheader, 2)

控制臺信息

總結(jié)

本篇文章就到這了,本例可以發(fā)現(xiàn)兩個頻繁項(xiàng)集{z,x}和{x}。取得頻繁項(xiàng)集后,可以根據(jù)置信度發(fā)現(xiàn)關(guān)聯(lián)規(guī)則,這一步較為簡單,可參考上篇的相關(guān)內(nèi)容,不在贅述。希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的其他精彩內(nèi)容!

相關(guān)文章

  • Python 操作 MySQL數(shù)據(jù)庫

    Python 操作 MySQL數(shù)據(jù)庫

    這篇文章主要介紹了Python 如何操作 MySQL,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape)

    python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape)

    今天小編就為大家分享一篇python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python計(jì)算寄送包裹重量的實(shí)現(xiàn)過程

    python計(jì)算寄送包裹重量的實(shí)現(xiàn)過程

    要實(shí)現(xiàn)這樣一個需求寄送包裹小于5kg,每公斤0.5元,大于等于5kg,超出5公斤部分,按照每公斤0.8元計(jì)算,輸入重量,輸出應(yīng)付金額,下面小編給大家分享實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Python中日志模塊logging的使用技巧和應(yīng)用詳解

    Python中日志模塊logging的使用技巧和應(yīng)用詳解

    在Python開發(fā)中,日志記錄是一個非常重要的環(huán)節(jié),它不僅有助于開發(fā)者追蹤程序的執(zhí)行流程,還能在出現(xiàn)問題時提供關(guān)鍵信息,幫助快速定位并解決問題,本文將結(jié)合實(shí)際案例,詳細(xì)介紹logging模塊的基礎(chǔ)用法和高級特性,需要的朋友可以參考下
    2024-08-08
  • Python內(nèi)置類型性能分析過程實(shí)例

    Python內(nèi)置類型性能分析過程實(shí)例

    這篇文章主要介紹了Python內(nèi)置類型性能分析過程實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python+Django實(shí)現(xiàn)接口測試工具的示例代嗎

    Python+Django實(shí)現(xiàn)接口測試工具的示例代嗎

    本文主要介紹了Python+Django實(shí)現(xiàn)接口測試工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python微信公眾號之關(guān)注公眾號自動回復(fù)

    python微信公眾號之關(guān)注公眾號自動回復(fù)

    這篇文章主要為大家詳細(xì)介紹了python微信公眾號之關(guān)注公眾號自動回復(fù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單實(shí)例教程

    15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于利用15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python中Django框架下的staticfiles使用簡介

    Python中Django框架下的staticfiles使用簡介

    這篇文章主要介紹了Python中Django框架下的staticfiles使用簡介,staticfiles是一個幫助Django管理靜態(tài)資源的工具,需要的朋友可以參考下
    2015-05-05
  • numpy返回array中元素的index方法

    numpy返回array中元素的index方法

    今天小編就為大家分享一篇numpy返回array中元素的index方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論