清華《數據挖掘算法與應用》FP-Growth算法

【例 8.7】實現FP 樹算法,并對模擬數據集 simpDat挖掘頻繁項集,最小支持度為2,繪制 FP樹并輸出頻繁項集。?

運行結果:

?

聲明:著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 31 10:14:48 2025@author: 破無差
"""
# - * - coding: utf-8 - * -class treeNode:    # FP 樹的類定義def __init__(self, nameValue, numOccur, parentNode):self.name = nameValueself.count = numOccurself.nodeLink = None    # 不同項集的相同項通過 nodeLink 連接self.parent = parentNodeself.children = {}# 存儲葉子節點def inc(self, numOccur):    # 節點出現次數累加self.count += numOccurdef 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):    # 構建 FP 樹headerTable = {}for trans in dataSet:    # 遍歷數據表中的每一行數據# 遍歷每一行的每一個數據元素,統計每一項出現的次數,將次數保存在 headerTable 中for item in trans:# get 函數返回指定鍵的值,如果值不在字典中返回 0,其中 dataSet[trans]=1headerTable[item] = headerTable.get(item, 0) + dataSet[trans]lessThanMinsup = list(filter(lambda k:headerTable[k]<minSup, headerTable .keys()))# 遍歷 headerTable 中的每一項,若一項出現的次數小于 minSup,則把該項刪除for k in lessThanMinsup:del(headerTable[k])for k in list(headerTable):if headerTable[k]<minSup:del(headerTable[k])# 將出現次數在 minSup 次以上的項保存在 freqItemSet 中freqItemSet = set(headerTable.keys())if len(freqItemSet) == 0:    # 如果 freqItemSet 為空,則返回 Nonereturn None, Nonefor k in headerTable:# 保存計數值及指向每種類型第一個元素的指針headerTable[k] = [headerTable[k], None]retTree = treeNode('Null Set', 1, None)   # 初始化 FP 樹for tranSet, count in dataSet.items():   # 遍歷 dataSet 的數據,累計出現次數localD = {}for item in tranSet:    #遍歷一組數據中的每一項if item in freqItemSet:localD[item] = headerTable[item][0]if len(localD)>0:ordereItems = [v[0] for v in sorted(localD.items(), key=lambda p: (p[1],p[0]), reverse=True)]updateTree(ordereItems, retTree, headerTable, count)return retTree, headerTable    #對 FP 樹進行更新def updateTree(items, infree, headerTable, count):    #返回 FP 樹和頭指針表if items[0] in infree.children:    #更新 FP 樹infree.children[items[0]].inc(count)    #檢查是否存在該節點else:    #存在則計數增加infree.children[items[0]] = treeNode(items[0], count, infree)#創建新節點if headerTable[items[0]][1] == None:    #若不存在該類別,則更新頭指針列表headerTable[items[0]][1] = infree.children[items[0]]else:updateHeader(headerTable[items[0]][1], infree.children[items[0]])if len(items)>1:    #仍有未分配的項updateTree(items[1:], infree.children[items[0]], headerTable, count)def updateHeader(nodeToTest, targetNode):    #更新 FP 樹while(nodeToTest.nodeLink !=None):nodeToTest = nodeToTest.nodeLinknodeToTest.nodeLink = targetNodedef loadSimpDat():    #創建數據集simpDat = [['11', '12', '15'],['12', '14'], ['12', '13'], ['11', '12', '14'], ['11', '13'], ['12', '13'], ['11', '13'], ['11', '12', '13', '15'],['11', '12', '13']]return simpDatdef createInitSet(dataSet):#將數據集中的數據項轉換為 frozenset 并保存在字典中,其值均為 1retDict = {}for trans in dataSet:fset = frozenset(trans)retDict.setdefault(fset, 0)retDict[fset] += 1# retDict[frozenset(trans)] = 1return 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 condPats    #返回條件模式基def mineTree(inTree, headerTable, minSup, prefix, freqItemList):#從頭指針表的底端開始,遞歸查找頻繁項集bigL = [v[0] for v in sorted(headerTable.items(), key=lambda p: str(p[1]))]for basePat in bigL:newFreqSet = prefix.copy()    #加入頻繁項表newFreqSet.add(basePat)freqItemList.append(newFreqSet)condPattBases = findPrefixPath(basePat, headerTable[basePat][1])#創造條件基myContTree, myHead = createTree(condPattBases, minSup)#構建條件 FP 樹if myHead != None:    #挖掘條件 FP 樹,直到其中沒有元素為止print('conditional tree for: ', newFreqSet)myContTree.disp(1)mineTree(myContTree, myHead, minSup, newFreqSet, freqItemList)if __name__ == '__main__': simpDat = loadSimpDat()initSet = createInitSet(simpDat)myFptree, myHeaderTab = createTree(initSet, 2)freqItems = []mineTree(myFptree, myHeaderTab, 2, set([]), freqItems)print(freqItems)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74892.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

npm 項目命名規則

以下是 npm 項目命名規則的詳細說明&#xff1a; 一、核心命名規則 必須使用小寫字母 名稱中不能包含大寫字母。原因&#xff1a; 跨平臺兼容性&#xff08;如 Linux 區分大小寫&#xff0c;而 Windows 不區分&#xff09;。避免命令行和 URL 中的大小寫沖突&#xff08;例如包…

Ubertool 的詳細介紹、安裝指南及使用說明

Ubertool&#xff1a;多協議網絡分析與調試平臺 一、Ubertool 簡介 Ubertool 是一款開源的 多協議網絡分析工具&#xff0c;專為物聯網&#xff08;IoT&#xff09;、嵌入式系統和工業自動化領域設計。它支持藍牙、Wi-Fi、LoRa、CAN總線等多種通信協議的實時監控、數據包捕獲…

AI重構農業:從“面朝黃土“到“數字原野“的產業躍遷—讀中共中央 國務院印發《加快建設農業強國規劃(2024-2035年)》

在東北黑土地的萬畝良田上&#xff0c;無人機編隊正在執行精準施肥作業&#xff1b;在山東壽光的智慧大棚里&#xff0c;傳感器網絡實時調控著番茄生長的微環境&#xff1b;在云南的咖啡種植園中&#xff0c;區塊鏈溯源系統記錄著每粒咖啡豆的旅程。這場靜默的農業革命&#xf…

FogFL: Fog-Assisted Federated Learning for Resource-Constrained IoT Devices

摘要 提示&#xff1a;這里可以添加系列文章的所有文章的目錄&#xff0c;目錄需要自己手動添加 -在本文中&#xff0c;我們提出了一個支持霧的聯邦學習框架–FogFL–來促進資源受限的物聯網環境中延遲敏感應用的分布式學習。聯邦學習&#xff08;FL&#xff09;是一種流行的分…

linux下編譯Websocketpp,適用x86和armv8

編譯boost庫 下載源文件&#xff1a;Version 1.79.0 編譯&#xff1a; sudo ./bootstrap.sh sudo ./b2 install 安裝websocketpp git clone https://github.com/zaphoyd/websocketpp.git cd websocketpp #進入目錄 mkdir build cd build cmake .. make sudo make ins…

Linux學習筆記——零基礎詳解:什么是Bootloader?U-Boot啟動流程全解析!

零基礎詳解&#xff1a;什么是Bootloader&#xff1f;U-Boot啟動流程全解析&#xff01; 一、什么是Bootloader&#xff1f;&#x1f4cc; 舉個例子&#xff1a; 二、U-Boot 是什么&#xff1f;三、U-Boot啟動過程&#xff1a;分為兩個階段&#x1f539; 第一階段&#xff08;匯…

Word 頁眉設置(不同章節不同頁眉)

需求分析 要給文檔設置頁眉&#xff0c;但是要不同的頁眉不同的頁眉 問題點&#xff1a;一旦設置頁眉 每個頁眉都是一樣的 現在要設置不一樣的 設置了頁眉但是整個文章的頁眉都一樣 問題解決 取消鏈接 前一節&#xff08;不和前面的頁眉同步更新&#xff09; 小結 不同的…

Debezium日常分享系列之:Debezium3.1版本之增量快照

Debezium日常分享系列之&#xff1a;Debezium3.1版本之增量快照 按需快照觸發一次臨時增量快照觸發臨時阻塞快照增量快照增量快照過程如何 Debezium 解決具有相同主鍵的記錄之間的沖突快照窗口觸發增量快照使用附加條件運行臨時增量快照使用 Kafka 信號通道觸發增量快照臨時增量…

音視頻開發從入門到精通:編解碼、流媒體協議與FFmpeg實戰指南

音視頻開發從入門到精通&#xff1a;編解碼、流媒體協議與FFmpeg實戰指南 音視頻技術作為數字媒體領域的核心&#xff0c;正在成為互聯網和移動應用的重要組成部分。本文將全面介紹音視頻開發的學習路徑&#xff0c;從基礎概念到高級應用&#xff0c;從編解碼原理到實戰案例&a…

bookkeeper基本概念

Apache BookKeeper 架構與基本概念 Apache BookKeeper 的架構 Apache BookKeeper 是一個高性能的分布式日志存儲系統&#xff0c;主要用于存儲和管理順序寫入的數據。它被設計用來提供低延遲、高吞吐量和強一致性的服務&#xff0c;常用于分布式系統中的日志存儲需求&#xf…

Scala相關知識學習總結3

包 - 包聲明&#xff1a;和Java類似&#xff0c;作用是區分同名類、管理類命名空間。Scala包名只能含數字、字母等&#xff0c;不能數字開頭、不能用關鍵字。 - 包說明&#xff1a;有類似Java的包管理風格&#xff0c;也有獨特嵌套風格。嵌套風格有兩個特點&#xff0c;一是&…

在Spring Boot中實現圖片上傳和修改

1. 圖片上傳實現步驟 1.1 添加依賴 確保 spring-boot-starter-web 和 spring-boot-starter-validation 已存在&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> <…

網絡原理 - HTTP/HTTPS

1. HTTP 1.1 HTTP是什么&#xff1f; HTTP (全稱為 “超文本傳輸協議”) 是?種應用非常廣泛的應用層協議. HTTP發展史&#xff1a; HTTP 誕生于1991年. 目前已經發展為最主流使用的?種應用層協議 最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的產品已經…

第十屆MathorCup高校數學建模挑戰賽-A題:無車承運人平臺線路定價問題

目錄 摘 要 一、問題提出 1.1 背景 1.2 問題重述 二、基本假設 三、符號說明 四、問題分析 4.1 問題一的分析 4.2 問題二的分析 4.3 問題三的分析 4.4 問題四的分析 五、模型的建立與求解 5.1 問題一模型的建立與求解 5.1.1 數據預處理 5.1.2 問題一結果檢驗:因子分析模型 5.2…

C++假期練習

思維導圖 牛客練習

Go語言-初學者日記(四):包管理

眾所周知——“包”治百病。 理解包與模塊&#xff0c;是 Go 邁向工程化開發的關鍵一環&#xff01; &#x1f4c2; 一、包&#xff08;Package&#xff09;是 Go 的基本組織單位 在 Go 中&#xff0c;每個 .go 文件都屬于某個包&#xff08;package&#xff09;&#xff1a; …

Scala面向對象2

1. 抽象屬性和方法&#xff1a;用 abstract 關鍵字定義抽象類&#xff0c;其中抽象屬性無初始值&#xff0c;抽象方法無實現 。重寫抽象方法需用 override &#xff0c;重寫抽象屬性時&#xff0c;可變屬性用 var &#xff0c;不可變屬性用 val 。 匿名子類&#xff1a;和 Jav…

DiffAD:自動駕駛的統一擴散建模方法

25年3月來自新加坡公司 Carion 和北航的論文“DiffAD: A Unified Diffusion Modeling Approach for Autonomous Driving”。 端到端自動駕駛 (E2E-AD) 已迅速成為實現完全自動駕駛的一種有前途的方法。然而&#xff0c;現有的 E2E-AD 系統通常采用傳統的多任務框架&#xff0c…

Python四大核心數據結構深度解析:列表、元組、字典與集合

在Python編程語言中&#xff0c;數據結構是組織和存儲數據的基本方式。Python提供了四種內置的核心數據結構&#xff1a;列表&#xff08;List&#xff09;、元組&#xff08;Tuple&#xff09;、字典&#xff08;Dictionary&#xff09;和集合&#xff08;Set&#xff09;。這…

網絡編程—Socket套接字(TCP)

上篇文章&#xff1a; 網絡編程—Socket套接字&#xff08;UDP&#xff09;https://blog.csdn.net/sniper_fandc/article/details/146923670?fromshareblogdetail&sharetypeblogdetail&sharerId146923670&sharereferPC&sharesourcesniper_fandc&sharefro…