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

python实现关联算法_python使用Apriori算法进行关联性解析

从大规模数据集中寻找物品间的隐含关系被称作关联分析或关联规则学习。过程分为两步:1.提取频繁项集。2.从频繁项集中抽取出关联规则。频繁项集是指经常出现在一块的物品的

从大规模数据集中寻找物品间的隐含关系被称作关联分析或关联规则学习。过程分为两步: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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。


推荐阅读
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • Python的参数解析argparse模块的学习
    本文介绍了Python中参数解析的重要模块argparse的学习内容。包括位置参数和可选参数的定义和使用方式,以及add_argument()函数的详细参数关键字解释。同时还介绍了命令行参数的操作和可接受数量的设置,其中包括整数类型的参数。通过学习本文内容,可以更好地理解和使用argparse模块进行参数解析。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
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社区 版权所有