python使用Apriori算法进行关联性解析
作者:开贰锤 发布时间:2022-08-15 13:02:10
从大规模数据集中寻找物品间的隐含关系被称作关联分析或关联规则学习。过程分为两步:1.提取频繁项集。2.从频繁项集中抽取出关联规则。
频繁项集是指经常出现在一块的物品的集合。
关联规则是暗示两种物品之间可能存在很强的关系。
一个项集的支持度被定义为数据集中包含该项集的记录所占的比例,用来表示项集的频繁程度。支持度定义在项集上。
可信度或置信度是针对一条诸如{尿布}->{葡萄酒}的关联规则来定义的。这条规则的可信度被定义为“支持度({尿布,葡萄酒})/支持度({尿布})”。
寻找频繁项集
Apriori原理:如果某个项集是频繁的,那么它的所有子集也是频繁的。反过来,如果一个项集是非频繁项集,那么它的所有超集也是非频繁的。
Apriori算法是发现频繁项集的方法。该算法首先生成所有单个物品的项集列表,接着扫描交易记录来查看哪些项集满足最小支持度要求,那些不满足最小支持度的项集会被去除掉。然后对剩下来的集合进行组合以生成包含两个元素的项集。接下来重新扫描交易记录,去掉不满足最小支持度的项集,该过程重复进行直到所有项集都被去掉。
Apriori伪代码
当列表中项的个数大于0时:
检查数据以确认每个项集都是频繁的
保留频繁项集并构建k+1项组成的候选项集的列表
从频繁项集中挖掘关联规则
当可信度大于最小可信度时,可以认为是含有关联规则的。可以观察到,如果某条规则不满足最小可信度要求,那么该规则的所有子集也不会满足最小可信度要求。
可以首先从一个频繁项集开始,接着创建一个规则列表,其中规则右部只包含一个元素,然后对这些规则进行测试,接下来合并,通过合并所有剩余规则右部来创建新的规则列表,其中规则右部包含两个元素,以此类推。
每个频繁项集:
while(len(L)>1)
(k规则列表)
满足最小置信度
创建k+1规则
整体代码:
import numpy as np
def loadDataSet():
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
def createC1(dateSet):
c1 = []
for line in dateSet:
for item in line:
if not [item] in c1:
c1.append([item])
c1.sort()
return list(map(frozenset,c1))
def scanData(data,ck,minSupport):#寻找满足最小支持度的项集
ssCnt = {}
for tid in data:
for can in ck:
if can.issubset(tid):
if can not in ssCnt.keys():
ssCnt[can] = 0
ssCnt[can] += 1
numItems = len(data)
retList = []
supportData = {}
for key in ssCnt.keys():
support = ssCnt[key]/numItems
if support >= minSupport:
retList.append(key)
supportData[key] = support
return retList,supportData
def aprioriGen(Lk,k): #根据k-1项集生成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 = list(map(set,dataSet))
l1,supportData = scanData(D,c1,minSupport)
L = [l1]
k = 2
while(len(L[k-2])>0):
ck = aprioriGen(L[k-2],k)
lk,supk = scanData(D,ck,minSupport)
k = k + 1
L.append(lk)
supportData.update(supk)
return L,supportData
def generaterRules(L,supportData,minConf=0.7):#生成规则
bigRuleList = []
for i in range(1,len(L)):
for freqSet in L[i]:
H1 = [frozenset([item]) for item in freqSet]
if i>1:
rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)
else:
calcConf(freqSet,H1,supportData,bigRuleList,minConf)
return bigRuleList
def calcConf(freqSet,H,suppurtData,brl,minConf = 0.7):#计算满足置信度的规则
prunedH = []
for conseq in H:
conf = suppurtData[freqSet]/suppurtData[freqSet-conseq]
if conf > minConf:
brl.append((freqSet-conseq,conseq,conf))
prunedH.append(conseq)
return prunedH
def rulesFromConseq(freqSet,H,supportData,brl,minConf=0.7):#递归生成规则
m = len(H[0])
if len(freqSet)>=(m+1):
Hmp1 = calcConf(freqSet,H,supportData,brl,minConf)
if (len(Hmp1) > 1):
Hmp1 = aprioriGen(Hmp1,m+1)
rulesFromConseq(freqSet,Hmp1,supportData,brl,minConf)
data = [line.split() for line in open('mushroom.dat').readlines()]
L,support = apriori(data,minSupport=0.3)
for i in range(len(L)):
for item in L[i]:
if item & {'2'}:
print(item)
代码及数据集下载:Apriori
来源:http://blog.csdn.net/weixin_37895339/article/details/78650100


猜你喜欢
- 本文实例讲述了smarty简单分页的实现方法,分享给大家供大家参考。具体实现方法如下:以下是模板中的smarty代码,用smarty简单的代
- 一、PEP 8规范官方文档:https://legacy.python.org/dev/peps/pep-0008/中文翻译: https:
- 这些天,我需要全文搜索。这个区块中最酷的孩子们是Elastic Search和Sorl:他们快速,灵活,资源消耗沉重并且需要Java,这几乎
- 下面一段代码是小编给大家介绍的Python ldap实现登录实例代码,一起看看吧ldap_config = { 'lda
- 在处理数据的时候经常需要读取TXT文件类型的数据转换为可执行的list,但是当我们有Excel的文件,如何将Excel文件转换为每行固定长度
- 关于端口扫描器端口扫描工具(Port Scanner)指用于探测服务器或主机开放端口情况的工具。常被计算机管理员用于确认安全策略,同时被攻击
- 有些框架本身就支持多配置文件,例如Ruby On Rails,nodejs下的expressjs。python下的Flask虽然本身支持配置
- 1. 云开发简介由于小程序本身存储数据的能力有限,所以不可能将大量的数据保存在客户端,而且将数据保存在本地既不安全,也无法与其他小程序用户共
- 无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充
- 网上搜到的代码,千篇一律是这个 Function Sort(ary) Dim KeepChecking,I,FirstV
- OpenCV:图片缩放和图像金字塔对图像进行缩放的最简单方法当然是调用resize函数啦!resize函数可以将源图像精确地转化为指定尺寸的
- __author__ = 'Administrator'import numpy as npimport cv2mri_im
- 一、Pytest概念Pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 u
- 一、初识正则表达式正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配快速检索文本、实现替换文本的操作jso
- 本文实例为大家分享了python合并同类型excel表格的具体代码,供大家参考,具体内容如下python脚本如下,验证有效。#!/usr/b
- 用法:matplotlib.pyplot.stem(*args, linefmt=None, markerfmt=None, basefmt
- 1.tensor张量与numpy相互转换tensor ----->numpyimport torcha=torch.ones([2,5
- 导语幼儿园升小学,小学升中学,中学升高中..........每个人都要经历的九年义务教育:伴随的都是作业、随堂考、以及每个科目的大大小小的考
- 什么是yaml一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大更直观,更方便,有点类似于json格式yaml文件格式:te
- 简介观察者模式是行为型模式的一种,定义了对象间一对多的关系。当对象的状态发生变化时候,依赖于它的对象会得到通知。适用场景类似触发钩子事件,可