热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:实现Apriori算法(python)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了实现Apriori算法(python)相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了实现Apriori算法(python)相关的知识,希望对你有一定的参考价值。



1 # coding: utf-8
2
3 # 利用python实现apriori算法
4
5 # In[1]:
6
7
8 #导入需要的库
9 from numpy import *
10
11
12 # In[2]:
13
14
15 def loadDataSet():
16 return [[1,3,4],[2,3,5],[1,2,3,5],[2,5]]
17
18
19 # In[3]:
20
21
22 def createC1(dataSet):
23 C1=[]
24 for transaction in dataSet:
25 for item in transaction:
26 if not [item] in C1:
27 C1.append([item])
28 C1.sort()
29 return map(frozenset,C1)
30
31
32 # In[4]:
33
34
35 #计算Ck在数据集D中的支持度,并返回支持度大于minSupport的数据集
36 def scanD(D,Ck,minSupport):
37 ssCnt={}
38 for tid in D:
39 for can in Ck:
40 if can.issubset(tid):
41 if can not in ssCnt.keys():
42 ssCnt[can]=1
43 else :
44 ssCnt[can]+=1
45 numItems=float(len(D))
46 retList=[]
47 supportData={}
48 for key in ssCnt:
49 support=ssCnt[key]/numItems
50 if support>= minSupport:
51 retList.insert(0,key)
52 supportData[key]=support
53 return retList,supportData
54
55
56 # In[15]:
57
58
59 def aprioriGen(Lk,k):
60 retList=[]
61 lenLk=len(Lk)
62 for i in range(lenLk):
63 for j in range(i+1,lenLk):
64 L1=list(Lk[i])[:k-2]
65 L2=list(Lk[j])[:k-2]
66 L1.sort()
67 L2.sort()
68 if L1==L2:
69 retList.append(Lk[i] | Lk[j])
70 return retList
71
72
73
74 # In[14]:
75
76
77 def apriori(dataSet, minSupport=0.5):
78 C1=createC1(dataSet)
79 D=list(map(set,dataSet))
80 print(D:,D)
81 L1,supportData= scanD(D,C1,minSupport)
82 L=[L1]
83 k=2
84 while (len(L[k-2])>0):
85 Ck=aprioriGen(L[k-2], k)
86 Lk,supK= scanD(D,Ck,minSupport)
87 supportData.update(supK)
88 if len(Lk)==0:
89 break
90 L.append(Lk)
91 k+=1
92 return L,supportData
93
94
95 # In[19]:
96
97
98 def calConf(freqSet,H,supportData,brl,minCOnf=0.7):
99 prunedH=[]
100 for conseq in H:
101 cOnf=supportData[freqSet]/supportData[freqSet-conseq]
102 if conf >= minConf:
103 print(freqSet-conseq, -->,conseq,conf,conf)
104 brl.append((freqSet-conseq,conseq,conf))
105 prunedH.append(conseq)
106 return prunedH
107
108
109 # In[21]:
110
111
112 def rulesFromConseq(freqSet,H,supportData,brl,minCOnf=0.7):
113 m=len(H[0])
114 if(len(freqSet)>(m+1)):
115 Hmpl=aprioriGen(H,m+1)
116 Hmpl=calConf(freqSet,Hmpl,supportData,brl,minConf)
117 print(Hmpl=,Hmpl)
118 print(len(Hmpl)=,len(Hmpl),len(freqSet)=,len(freqSet))
119 if(len(Hmpl)>1):
120 rulesFromConseq(freqSet,Hmpl,supportData,brl,minConf)
121
122
123 # In[9]:
124
125
126 def generateRules(L,supportData,minCOnf=0.7):
127 bigRuleList=[]
128 for i in range(1,len(L)):
129 for freqSet in L[i]:
130 H1=[frozenset([item]) for item in freqSet]
131 if(i>1):
132 rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)
133 else:
134 calConf(freqSet,H1,supportData,bigRuleList,minConf)
135 return bigRuleList
136
137
138 # In[10]:
139
140
141 def testApriori():
142 dataSet=loadDataSet()
143 print(dataSet:,dataSet)
144 L1,supportData1=apriori(dataSet,minSupport=0.7)
145 print(L(0.7):,L1)
146 print(supportData(0.7):,supportData1)
147 print(------------------------------------------)
148 L2,supportData2=apriori(dataSet,minSupport=0.5)
149 print(L(0.5):,L2)
150 print(supportData(0.5:).supportData2)
151 print(------------------------------------------)
152
153
154 # In[11]:
155
156
157 def testGenerateRules():
158 dataSet=loadDataSet()
159 L1,supportData1=apriori(dataSet,minSupport=0.2)
160 print(L(0.2):,L1)
161 print(minSupport(0.2):,supportData1)
162 rules=generateRules(L1,supportData1,minCOnf=1.1)
163 print(Rules:,rules)
164
165
166 # In[12]:
167
168
169 def main():
170 testApriori()
171 testGenerateRules()
172
173
174 # In[22]:
175
176
177 if __name__=="__main__":
178 main()

参考:“机器学习实战-ApachCN”


推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
author-avatar
小新亚笔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有