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_Lksub1[i])

l2 = list(list_Lksub1[j])

l1.sort()

l2.sort()

if l1[0:k-2] == l2[0:k-2]:

Ck_item = list_Lksub1[i] | list_Lksub1[j]

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_count[item] = 1

else:

item_count[item] += 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)

相关推荐
一颗花生米。18 分钟前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
问道飞鱼19 分钟前
Java基础-单例模式的实现
java·开发语言·单例模式
学习使我快乐0122 分钟前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
通信仿真实验室1 小时前
(10)MATLAB莱斯(Rician)衰落信道仿真1
开发语言·matlab
勿语&1 小时前
Element-UI Plus 暗黑主题切换及自定义主题色
开发语言·javascript·ui
hsling松子2 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
belldeep2 小时前
python:reportlab 将多个图片合并成一个PDF文件
python·pdf·reportlab
dengqingrui1233 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝3 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O3 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树