apriori算法python实现

import numpy as np

def load_data(file_path):

data = \[\]

with open(file_path, 'r') as f:

for line in f.readlines():

line = line.strip().split(',')

data.append(line)

return data

def create_C1(data):

C1 = set()

for transaction in data:

for item in transaction:

C1.add(frozenset(item))

return C1

def is_apriori(Ck_item, Lksub1):

for item in Ck_item:

sub_Ck = Ck_item - frozenset(item)

if sub_Ck not in Lksub1:

return False

return True

def create_Ck(Lksub1, k):

Ck = set()

len_Lksub1 = len(Lksub1)

list_Lksub1 = list(Lksub1)

for i in range(len_Lksub1):

for j in range(1, len_Lksub1):

l1 = list(list_Lksub1i)

l2 = list(list_Lksub1j)

l1.sort()

l2.sort()

if l10:k-2 == l20:k-2:

Ck_item = list_Lksub1i | list_Lksub1j

if is_apriori(Ck_item, Lksub1):

Ck.add(Ck_item)

return Ck

def generate_Lk_by_Ck(data, Ck, min_support):

Lk = set()

len_data = len(data)

item_count = {}

for transaction in data:

for item in Ck:

if item.issubset(transaction):

if item not in item_count:

item_countitem = 1

else:

item_countitem += 1

support_data = {key: value / len_data for key, value in item_count.items() if value / len_data >= min_support}

for key in support_data:

Lk.add(key)

return Lk

def apriori(data, min_support=0.5):

C1 = create_C1(data)

D = list(map(set, data))

L1, support_data = generate_Lk_by_Ck(D, C1, min_support)

Lksub1 = L1.copy()

L = Lksub1

i = 2

while True:

Ci = create_Ck(Lksub1, i)

Li, supK = generate_Lk_by_Ck(D, Ci, min_support)

if not Li:

break

Lksub1 = Li.copy()

L.append(Lksub1)

i += 1

return L, support_data

if name == 'main':

file_path = 'your_file_path.csv' # 请替换为你的数据文件路径

data = load_data(file_path)

L, support_data = apriori(data)

print("频繁项集:", L)

print("支持度数据:", support_data)

相关推荐
一去不复返的通信er5 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
2501_944521595 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
行思理6 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
wangchunyu1147 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
程序 代码狂人8 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade9 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
2501_944521599 小时前
Immer 跨端三方库仓颉适配全流程
python·eclipse·django
信誓旦旦的程序猿9 小时前
【Python量化实战宝典 #26】止损与回撤控制手册:移动止损、最大回撤(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
2501_944521599 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
Patrick在香港9 小时前
同一行 strftime,两台机器跑出两种日期
python·datetime·时区·locale·日期处理