【數據挖掘】關聯規則算法學習—Apriori

關聯規則算法學習—Apriori

????????Apriori算法是關聯規則挖掘中的經典算法,用于發現數據集中的頻繁項集和強關聯規則。其核心思想基于先驗性質:若一個項集是頻繁的,則其所有子集也一定是頻繁的。該算法通過逐層搜索的迭代方法高效挖掘關聯規則。

要求:

????????理解并掌握關聯規則經典算法Apriori算法,理解算法的原理,能夠實現算法,并對給定的數據集進行關聯規則挖掘

代碼實現:

import pandas as pd
from itertools import combinations
from collections import defaultdict# 讀取數據
data = pd.read_csv('實驗2-Groceries(1).csv')# 預處理數據,將字符串格式的項集轉換為集合
transactions = []
for items in data['items']:# 去除大括號和引號,然后分割items_cleaned = items.strip('{}"').replace('"', '').split(',')transactions.append(set(items_cleaned))print(f"總交易數: {len(transactions)}")
print(f"前5條交易示例: {transactions[:5]}")def get_frequent_itemsets(transactions, min_support):"""實現Apriori算法找出頻繁項集"""# 第一次掃描:計算單個項目的支持度item_counts = defaultdict(int)for transaction in transactions:for item in transaction:item_counts[item] += 1# 篩選滿足最小支持度的單項num_transactions = len(transactions)frequent_items = {}for item, count in item_counts.items():support = count / num_transactionsif support >= min_support:frequent_items[frozenset([item])] = supportcurrent_frequent = frequent_itemsfrequent_itemsets = {}k = 1while current_frequent:frequent_itemsets.update(current_frequent)# 生成候選項集next_candidates = set()items = [item for itemset in current_frequent.keys() for item in itemset]unique_items = list(set(items))# 生成k+1大小的候選項集if k == 1:# 對于k=1,直接兩兩組合for i in range(len(unique_items)):for j in range(i+1, len(unique_items)):next_candidates.add(frozenset([unique_items[i], unique_items[j]]))else:# 對于k>1,使用先驗性質for itemset1 in current_frequent:for itemset2 in current_frequent:union_set = itemset1.union(itemset2)if len(union_set) == k + 1:next_candidates.add(union_set)# 第二次掃描:計算候選項集的支持度candidate_counts = defaultdict(int)for transaction in transactions:for candidate in next_candidates:if candidate.issubset(transaction):candidate_counts[candidate] += 1# 篩選滿足最小支持度的項集current_frequent = {}for itemset, count in candidate_counts.items():support = count / num_transactionsif support >= min_support:current_frequent[itemset] = supportk += 1return frequent_itemsetsdef generate_association_rules(frequent_itemsets, min_confidence):"""生成關聯規則"""rules = []for itemset in frequent_itemsets.keys():if len(itemset) < 2:continuesupport_itemset = frequent_itemsets[itemset]# 生成所有可能的非空子集all_subsets = []for i in range(1, len(itemset)):all_subsets.extend(combinations(itemset, i))for subset in all_subsets:subset = frozenset(subset)remaining = itemset - subsetif remaining:support_subset = frequent_itemsets.get(subset, 0)if support_subset > 0:confidence = support_itemset / support_subsetif confidence >= min_confidence:rules.append((subset, remaining, support_itemset, confidence))return rules# 設置支持度和置信度閾值
min_support = 0.05  # 5%的支持度
min_confidence = 0.3  # 30%的置信度# 找出頻繁項集
frequent_itemsets = get_frequent_itemsets(transactions, min_support)# 生成關聯規則
rules = generate_association_rules(frequent_itemsets, min_confidence)# 按支持度排序
sorted_rules = sorted(rules, key=lambda x: x[2], reverse=True)# 打印頻繁項集
print("\n頻繁項集 (支持度 ≥ {}):".format(min_support))
for itemset, support in frequent_itemsets.items():if len(itemset) >= 2:  # 只顯示多項集print(f"{set(itemset)}: {support:.3f}")# 打印關聯規則
print("\n關聯規則 (置信度 ≥ {}):".format(min_confidence))
for rule in sorted_rules[:20]:  # 顯示前20條規則antecedent, consequent, support, confidence = ruleprint(f"{set(antecedent)} => {set(consequent)} (支持度: {support:.3f}, 置信度: {confidence:.3f})")# 嘗試不同的支持度和置信度
parameters = [(0.05, 0.3),  # 原始參數(0.03, 0.4),  # 更低支持度,更高置信度(0.08, 0.25)  # 更高支持度,更低置信度
]for sup, conf in parameters:print(f"\n參數: 最小支持度={sup}, 最小置信度={conf}")freq_itemsets = get_frequent_itemsets(transactions, sup)rules = generate_association_rules(freq_itemsets, conf)print(f"頻繁項集數量: {len(freq_itemsets)}")print(f"關聯規則數量: {len(rules)}")if rules:# 顯示支持度最高的規則top_rule = max(rules, key=lambda x: x[2])print("支持度最高的規則:")print(f"{set(top_rule[0])} => {set(top_rule[1])} (支持度: {top_rule[2]:.3f}, 置信度: {top_rule[3]:.3f})")

執行結果:

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

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

相關文章

助力高考,利用python獲取本專科專業選考科目要求

大家好&#xff0c;今天我們來利用python技術助力高考&#xff0c;獲取網上的本專科專業選考科目要求&#xff0c;用到的Python模塊有&#xff1a;Requests、Json、BeautifulSoup、Pandas &#xff0c;主要思路是Requests獲取接口請求&#xff0c;利用BeautifulSoup 解析網站的…

Python 商務數據分析—— NumPy 學習筆記Ⅱ

一、 數組元素值的替換 我們可以使用索引或 where () 函數來替換 NumPy 數組中的元素值。 1.1 方式一&#xff1a;索引 import numpy as npnp.random.seed(42)a3 np.random.randint(0, 10, size(3, 4))print("原數組:\n", a3)a3\[1] 0 # 將a3數組第一行數據全…

遙感圖像語義分割1-安裝mmsegmentation

參考&#xff1a; mmsegmentation: 安裝并使用自定義數據集進行訓練_mmsegmentation安裝-CSDN博客 最新Windows配置安裝mmcv與mmsegmentation&#xff0c;以及mmsegmentation的驗證_mmcv安裝-CSDN博客 GitCode - 全球開發者的開源社區,開源代碼托管平臺 參考&#xff1a; …

【菜狗的記錄】模糊聚類最大樹、圖神經網絡、大模型量化——20250627

每日學習過程中記錄的筆記&#xff0c;從各個網站整理下來&#xff0c;用于當日復盤。 如果其中的知識點能幫到你&#xff0c;也很榮幸呀。 -------------------------------------------------------20250622------------------------------------------------------------- …

《短劇平臺開發指南:技術方案、核心功能與行業趨勢》

一、短劇行業現狀與系統開發價值 近年來&#xff0c;短劇市場呈現爆發式增長&#xff0c;成為數字內容領域的新風口。數據顯示&#xff0c;2023年國內短劇市場規模已突破300億元&#xff0c;用戶規模達到4.5億。這種以"短、平、快"為特點的內容形式&#xff0c;憑借…

[FPGA]嵌入式系統FPGA設計資源

嵌入式系統FPGA設計資源 一、供應商 https://www.altera.com- Altera FPGA 供應商網站 https://www.altera.com/events/northamerica/intel-soc-fpga-developer-forum/overview.html- SoC 開發人員論壇 https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/li…

ClickHouse 可觀測性最佳實踐

ClickHouse 介紹 ClickHouse 是一款高性能、列式存儲的開源分析型數據庫&#xff0c;專為在線分析處理&#xff08;OLAP&#xff09;場景設計。它能夠處理海量數據&#xff0c;支持實時查詢和復雜的數據分析&#xff0c;具備極高的讀寫性能和數據壓縮能力。ClickHouse 提供了強…

Android Framework設置時間為24小時制

文章目錄 定位源碼實現附錄12 小時制與 24 小時制的詳細解析一、基本定義與核心區別二、轉換方法與示例三、應用場景與文化差異四、延伸知識&#xff1a;特殊計時制與歷史背景 目的是把設置中使用默認語言區域關掉&#xff0c;并把使用24小時制打開 如下圖為原始的&#xff1a;…

基于STM32設計的掃地機器人

一、前言 1.1 項目介紹 【1】項目開發背景 隨著社會節奏的加快和人們生活方式的改變&#xff0c;智能家居產品逐漸走入千家萬戶。作為智能清潔系統的重要組成部分&#xff0c;掃地機器人憑借其自動化、高效性和便捷性&#xff0c;成為現代家庭中不可或缺的智能設備之一。傳統…

什么是接口測試?

2025最新Jmeter接口測試從入門到精通&#xff08;全套項目實戰教程&#xff09; 接口測試概念 接口測試是項目測試的一部分&#xff0c;它測試的主要對象是接口&#xff0c;是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與所測系統之間以及內部各系統之間的交…

JDY-23藍牙模塊與電腦的連接方式

JDY-23藍牙模塊支持多種連接方式&#xff0c;包括SPP&#xff08;串口通信&#xff09;模式和BLE&#xff08;低功耗藍牙&#xff09;模式。以下是與電腦連接的具體方法&#xff1a; 1. 通過SPP模式連接 JDY-23模塊支持SPP協議&#xff0c;可以通過串口與電腦通信。以下是連接…

【網絡】Linux 內核優化實戰 - net.core.rmem_max

目錄 參數作用與原理默認值與查看方法調整場景與方法適用場景調整方法 與其他參數的協同性能影響與注意事項典型案例總結 net.core.rmem_max 是 Linux 內核中控制 套接字接收緩沖區&#xff08;Receive Buffer&#xff09;最大允許值 的參數。它與 net.core.rmem_default&#…

設計模式 | 工廠模式

工廠模式&#xff08;Factory Pattern&#xff09; 是創建型設計模式的核心成員&#xff0c;它通過將對象創建的邏輯封裝起來&#xff0c;實現了創建與使用的解耦。本文將深入探討工廠模式的核心思想、實現技巧以及在C中的高效實現方式。 為什么需要工廠模式&#xff1f; 在軟…

數字孿生技術驅動UI前端變革:從靜態展示到動態交互的飛躍

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區&#xff0c;數字孿生技術正以破竹之勢重構 UI 前端的技術邏輯與設計理念…

Django實戰:自定義中間件實現全鏈路操作日志記錄

文章目錄 一、中間件介紹激活中間件生命周期 二、自定義中間件中間件鉤子函數基于類的中間件 三、實戰案例操作日志功能參考資料 一、中間件 介紹 在 Django 中&#xff0c;中間件&#xff08;Middleware&#xff09;是一組輕量級、底層的插件系統&#xff0c;用于全局地改變…

Java編程之迭代器模式(Iterator Pattern)

引言&#xff1a; 走進圖書館&#xff0c;你站在一排書架前&#xff0c;想要瀏覽書籍。你會一格格地從左到右翻閱書籍&#xff0c;而不是去研究書架是什么。 一本書一本書地翻&#xff0c;才知道書架上藏了什么書&#xff0c;研究書架的構造是不知道書籍的內容的。 這種“逐本…

ARM64 linux系統的一般執行過程

1、正在運行的用戶進程X 2、發生異常&#xff08;包括系統調用等&#xff09;&#xff0c;CPU完成的工作&#xff1a;把當前程序指針寄存器PC放入ELR_EL1寄存器&#xff0c;把PSTATE放入SPSR_EL1寄存器&#xff0c;把異常產生的原因放在ESR_EL1寄存器&#xff0c;將異常向量表…

Vue3+ element 實現導入導出

一、導入功能相關代碼分析 相關變量定義 importVisible&#xff1a;這是一個ref類型的響應式變量&#xff0c;用于控制導入對話框的顯示與隱藏&#xff0c;初始值為false。當用戶點擊 “導入” 按鈕時&#xff0c;會嘗試將其值設為true來顯示導入對話框&#xff0c;若出現異常則…

Git安裝(純小白版)

一、Git安裝 1. 簡介 Git是一款免費開源的分布式版本控制系統&#xff0c;常用于軟件開發。它能記錄文件在不同時間的改動&#xff0c;讓用戶在需要時查看、恢復舊版本。支持多人協作開發&#xff0c;多人可同時修改項目文件&#xff0c;Git會處理好沖突。開發者能在本地創建…

cocos2 本地根據文本內容生成二維碼

cocos2 本地根據文本內容生成二維碼 之前做了一個功能&#xff0c;就是cocos2小游戲&#xff0c;結算頁面需要有一個二維碼&#xff0c;二維碼內容是一個網址&#xff0c;這個網址需要根據用戶游玩分數確定訪問哪個網址&#xff0c;但是這個小游戲是單機小游戲&#xff0c;不連…