Apriori算法--Python实现

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Mon Nov 05 22:50:13 2018
 4
 5 @author: ZhuChaochao
 6 """
 7 def loadDataSet():
 8     f = open("F:/Python CODE/zcc/1.txt",‘r‘) #读取的数据
 9     source = f.readlines()
10     f.close()
11     dataset = []
12     for line in source:
13         line=line.strip().split(‘  ‘)
14         curLine = list(map(int,line))
15         dataset.append(curLine)
16     return dataset
17
18
19 def createC1(dataset):
20     C1 = []
21     for transaction in dataset:
22         for item in transaction:
23             if not [item] in C1:
24                 C1.append([item])
25     C1.sort()
26     return map(frozenset,C1)
27
28 def scanD(D,CK,minSupport):
29     ssCnt = {}
30     for tid in D:
31         for can in CK:
32             if can.issubset(tid):
33                 if not can in ssCnt:
34                     ssCnt[can] = 1
35                 else:
36                     ssCnt[can] += 1
37
38     D=list(map(set,D))
39     numItems = float(len(D))
40     retList = []
41     supportData = {}
42     for key in ssCnt:
43         try:
44             support = ssCnt[key]/numItems
45         except (ZeroDivisionError,ValueError) as e:
46             print(e)
47         if support >= minSupport:
48             retList.insert(0,key)
49         supportData[key] = support
50     return retList,supportData
51
52 def aprioriGen(Lk, k):
53     retList = []
54     lenLk = len(Lk)
55     for i in range(lenLk):
56         for j in range(i+1, lenLk):
57             L1 = list(Lk[i])[:k-2]; L2 = list(Lk[j])[:k-2]
58             L1.sort(); L2.sort()
59             if L1==L2:
60                 retList.append(Lk[i] | Lk[j])
61     return retList
62
63 def apriori(dataSet, minSupport = 0.5):
64     C1 = createC1(dataSet)
65     D = map(set, dataSet)
66     L1, supportData = scanD(D, C1, minSupport)
67     L = [L1]
68     k = 2
69     while (len(L[k-2]) > 0):
70         Ck = aprioriGen(L[k-2], k)
71         Lk, supK = scanD(D, Ck, minSupport)
72         supportData.update(supK)
73         L.append(Lk)
74         k += 1
75     L, supportDatareturn 

source = f.readlines()
f.close()
dataset = []
for line in source:
line=line.strip().split(‘ ‘)
curLine = list(map(int,line))
dataset.append(curLine)
return dataset

def createC1(dataset):
C1 = []
for transaction in dataset:
for item in transaction:
if not [item] in C1:
C1.append([item])
C1.sort()
return map(frozenset,C1)

def scanD(D,CK,minSupport):
ssCnt = {}
for tid in D:
for can in CK:
if can.issubset(tid):
if not can in ssCnt:
ssCnt[can] = 1
else:
ssCnt[can] += 1

D=list(map(set,D))
numItems = float(len(D))
retList = []
supportData = {}
for key in ssCnt:
try:
support = ssCnt[key]/numItems
except (ZeroDivisionError,ValueError) as e:
print(e)
if support >= minSupport:
retList.insert(0,key)
supportData[key] = support
return retList,supportData

def aprioriGen(Lk, k):
retList = []
lenLk = len(Lk)
for i in range(lenLk):
for j in range(i+1, lenLk):
L1 = list(Lk[i])[:k-2]; L2 = list(Lk[j])[:k-2]
L1.sort(); L2.sort()
if L1==L2:
retList.append(Lk[i] | Lk[j])
return retList

def apriori(dataSet, minSupport = 0.5):
C1 = createC1(dataSet)
D = map(set, dataSet)
L1, supportData = scanD(D, C1, minSupport)
L = [L1]
k = 2
while (len(L[k-2]) > 0):
Ck = aprioriGen(L[k-2], k)
Lk, supK = scanD(D, Ck, minSupport)
supportData.update(supK)
L.append(Lk)
k += 1
L, supportDatareturn

原文地址:https://www.cnblogs.com/USTC-ZCC/p/9982134.html

时间: 2024-10-08 10:13:38

Apriori算法--Python实现的相关文章

小白向Apriori算法Python实现

参考博客:http://www.cnblogs.com/llhthinker/p/6719779.html 学习的别人的代码,用Python实现的Apriori算法,算法介绍见https://www.cnblogs.com/1113127139aaa/p/9926507.html 内容是实现Apriori算法的流程,数据是简单的测试数组,因为自己比较菜所以仅是为了自己复习写了很水的注释,如果有像我一样的小白可以参考,先把完成的部分贴上来,原博客有原来博主的注释 def load_data_set

Apriori 算法python实现

1. Apriori算法简介 Apriori算法是挖掘布尔关联规则频繁项集的算法.Apriori算法利用频繁项集性质的先验知识,通过逐层搜索的迭代方法,即将K-项集用于探察(k+1)项集,来穷尽数据集中的所有频繁项集.先找到频繁项集1-项集集合L1, 然后用L1找到频繁2-项集集合L2,接着用L2找L3,知道找不到频繁K-项集,找到每个Lk需要一次数据库扫描.注意:频繁项集的所有非空子集也必须是频繁的.Apriori性质通过减少搜索空间,来提高频繁项集逐层产生的效率.Apriori算法由连接和剪

Apriori算法及python实现

1 Apriori介绍 Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集.首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然后利用L1找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集.最后再在所有的频繁集中找出强规则,即产生用户感兴趣的关联规则. 2.算法模拟 3.伪代码 4.python实现 # -*- coding:gb2312 -*- import sys import copy def

Apriori算法思想和其python实现

第十一章 使用Apriori算法进行关联分析 一.导语 "啤酒和尿布"问题属于经典的关联分析.在零售业,医药业等我们经常需要是要关联分析.我们之所以要使用关联分析,其目的是为了从大量的数据中找到一些有趣的关系.这些有趣的关系将对我们的工作和生活提供指导作用. 二.关联分析的基本概念 所谓的关联分析就是从海量的数据中找到一些有趣的关系.关联分析它有两个目标,一个是发现频繁项集,另一个是发现关联规则. 关联分析常用到的四个概念是:频繁项集,关联规则,置信度,支持度.频繁项集指的是频繁同时出

Apriori算法的Python实现

Apriori算法是数据挖掘中频发模式挖掘的鼻祖,从60年代就开始流行,其算法思想也十分简单朴素,首先挖掘出长度为1的频繁模式,然后k=2 将这些频繁模式合并组成长度为k的频繁模式,算出它们的频繁次数,而且要保证其所有k-1长度的子集也是频繁的,值得注意的是,为了避免重复,合并的时候,只合并那些前k-2个字符都相同,而k-1的字符一边是少于另一边的. 以下是算法的Python实现: __author__ = 'linfuyuan' min_frequency = int(raw_input('p

机器学习(八)—Apriori算法

摘要:本文对Apriori算法进行了简单介绍,并通过Python进行实现,进而结合UCI数据库中的肋形蘑菇数据集对算法进行验证. “啤酒与尿布”的例子相信很多人都听说过吧,故事是这样的:在一家超市中,人们发现了一个特别有趣的现象,尿布与啤酒这两种风马牛不相及的商品居然摆在一起.但这一奇怪的举措居然使尿布和啤酒的销量大幅增加了.这可不是一个笑话,而是一直被商家所津津乐道的发生在美国沃尔玛连锁超市的真实案例.原来,美国的妇女通常在家照顾孩子,所以她们经常会嘱咐丈夫在下班回家的路上为孩子买尿布,而丈夫

频繁模式挖掘-Apriori算法

DM实验,写的比较二,好多情况还没有考虑,后续有时间会修改. 开始的时候数据结构没设计好导致写到后面费了很大的劲.不过还好python的列表有起死回生的功效... 数据集:database.txt I1,I2,I5 I2,I4 I2,I3 I1,I2,I4 I1,I3 I2,I3 I1,I3 I1,I2,I3,I5 I1,I2,I3 apriori.py #coding=utf-8 """ author:messiandzcy apriori.py date:2014.12.

机器学习实战笔记9(Apriori算法)

Apriori算法也属于无监督学习,它强调的是"从数据X中能够发现什么".从大规模的数据集中寻找物品之间隐含关系被称为关联分析或者称为关联规则学习.这里的主要问题在于,寻找物品的不同组合是一项十分耗时的任务,所需的计算代价很高,蛮力搜索并不能解决这个问题.因此此处介绍使用Apriorio算法来解决上述问题. 1:简单概念描述 (1)              频繁项集:指经常出现在一块的物品的集合. 关联规则暗示两种物品之间存在很强的关系.(这里我们事先定义阀值,超过该阀值,证明两者之

使用Apriori算法进行关联分析(python2)

summary: 关联分析是用于发现大数据集中元素间有趣关系的一个工具集,可以采用两种方式来量化这些有趣的关系.第一种方式是频繁项集,它会给出经常出现在一起的元素项:第二种方式是关联规则,每条关联规则意味着元素项之间“如果……那么”的关系. 发现元素项间不同的组合是个十分耗时的任务,不可避免需要大量昂贵的计算资源,这就需要更智能的方法在合理时间范围内找到频繁项集. 使用Apriori原理可以减少在数据库上进行检查的集合的数目.Apriori算法从单元素项集开始,通过组合满足最小支持度要求的项集来