从大规模数据集中寻找物品间的隐含关系被称为关联分析,最有名的案例应该是啤酒和尿布了。这些关系可以用两种方式来量化,一个是使用频繁项集,给出经常在一起出现的元素项;一个是关联规则,每条关联规则意味着元素项之间的“如果……那么”(A-->B)的关系;要先找到频繁项集然后才能获得关联规则。

本文主要是先讲找到频繁项集(本文中的代码使用的是Python3)。

发现元素之间的关系是一个非常耗时的任务,可以使用Apriori算法来减少在数据库上进行检查的集合的数目。Apriori原理是如果一个元素项是不频繁的,则那些包含该元素的所有超级也是不频繁的(例A是不频繁出现的,则AB也是不频繁的);Apriori算法从单元素项集开始,通过组合满足最小支持度要求的项集来形成更大的集合。发现频繁项集

先产生一个只有一个元素的项集的候选集:def loadDataset():    return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]    def creatC1(dataset):    C1 = []    for transaction in dataset:        for item in transaction:            if not [item] in C1:                C1.append([item])    C1.sort()    return list(map(frozenset, C1))#frozenset 是不可变类型,可以将集合作为字典健值使用,set不能;

然后再统计C1中元素出现的次数,以计算是否满足最小支持度,满足最小支持度的元素才添加到频繁项集列表中:def scanD(Dset, Ck, minSupport):#Dset是数据集,Ck是候选项集列表,minSupport是最小支持度   ssCnt = {}   #创建一个空字典ssCnt用来保存候选子集和候选子集对应的频数   for tid in Dset:       for can in Ck:           if can.issubset(tid):               if not ssCnt.__contains__(can):                   ssCnt[can] = 1               else:                   ssCnt[can] += 1                     #计算字典中的每个元素,计算支持度                    numItems = float(len(Dset))   retList = []   supportData = {}   for key in ssCnt:       support = ssCnt[key]/numItems       if support >= minSupport:           retList.inset(0, key)       supportData[key] = support       return retList, supportData#retList是返回的频繁项集, supportData是对应的的支持度

以上只是返回只有一个元素的频繁项集,还需要完善代码以返回由k项组成的频繁项集,步骤与上述相同,也是先产生含K项的候选集列表,然后判断是否满足最小支持度,这里为了减少开销,要使用Apriori原理;def aprioriGen(Lk, k):#Lk是频繁项集列表,K是项集元素个数,函数返回的是CK,即含有K个元素的候选项集    retlist = []    lenLk = len(Lk)#计算频繁项集的元素个数,然后比较项集中每一个元素和其他元素(两个for循环)#如果一个元素和另一个元素的前k-2项重复,则将两个元素合并成一个大小为K的集合    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

创建一个主函数apriori封装上面几个函数,def apriori(dataset, minsupport = 0.5):   C1 = createC1(dataset)   D = list(map(set, dataset))   L1, supportdata = scanD(D,C1 ,minsupport)   L = [L1]#先调用createC1和scanD产生只有一个元素的频繁项集#然后基于L调用apriorigen产生只有两个元素的候选集,再调用scanD来生成含有#两个元素的频繁项集,之后K加一,循环调用产生含有三个元素的频繁项集,一直循环#直到L(K-2)的长度=0   k =2   while (len(L[k-2]) > 0):       Ck = apriorigen(L[k-2], k)       Lk, supk = scanD(D, Ck, 0.2)       supportdata.update(supk)       L.append(Lk)       k += 1   return L, supportdata

直接调用apirio()主函数就可以得到满足最小支持度的频繁项集啦,例如L, SupportData = apriori(dataset,minsupport=0.7),L就是出现次数大于70%以上的所有项集。

原文出处:https://blog.csdn.net/github_38980969/article/details/81236838

python 频繁项集_关联分析之发现频繁项集--使用Apriori算法(1)相关推荐

  1. 频繁项目集java实现_关联分析(2):Apriori产生频繁项集

    在关联分析(1):概念及应用中,我们介绍了关联分析的应用场景.基本概念和规则产生思路.在本次的文章中,我们将介绍Apriori算法频繁项集产生的原理.文章中会涉及专有名词,不清楚概念的可在上一篇文章中 ...

  2. java频繁项集挖掘数据关联_数据挖掘之关联分析二(频繁项集的产生)

    频繁项集的产生 格结构(lattice structure)常常用来表示所有可能的项集. 发现频繁项集的一个原始方法是确定格结构中每个候选项集的支持度.但是工作量比较大.另外有几种方法可以降低产生频繁 ...

  3. python决策树代码解读_建模分析之机器学习算法(附pythonR代码)

    0序 随着移动互联和大数据的拓展越发觉得算法以及模型在设计和开发中的重要性.不管是现在接触比较多的安全产品还是大互联网公司经常提到的人工智能产品(甚至人类2045的的智能拐点时代).都基于算法及建模来 ...

  4. python机器学习案例系列教程——关联分析(Apriori、FP-growth)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 关联分析的基本概念 关联分析(Association Analysis):在大规模数据集中寻找有趣的关系. 频繁项集(Frequent ...

  5. apriori算法c++_关联分析——基于Apriori算法实现

    电子商务推荐系统主要是通过统计和挖掘技术,根据用户在网站上的行为,主动为用户提供推荐服务,从而提高网站体验.而根据不同的业务场景,推荐系统需要满足不同的推荐粒度,包括搜索推荐,商品类目推荐,商品标签推 ...

  6. apriori数据集_关联分析——基于Apriori算法实现

    电子商务推荐系统主要是通过统计和挖掘技术,根据用户在网站上的行为,主动为用户提供推荐服务,从而提高网站体验.而根据不同的业务场景,推荐系统需要满足不同的推荐粒度,包括搜索推荐,商品类目推荐,商品标签推 ...

  7. python consul配置中心_微服务注册发现配置中心-consul

    Consul详解 近期在微服务业务中用的注册中心,在此简单记录下以备后用. 一 概述 1.1 概念 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.Con ...

  8. python游走代码_介绍一个全局最优化的方法:随机游走算法(Random Walk)

    1. 关于全局最优化求解 全局最优化是一个非常复杂的问题,目前还没有一个通用的办法可以对任意复杂函数求解全局最优值.上一篇文章讲解了一个求解局部极小值的方法--梯度下降法.这种方法对于求解精度不高的情 ...

  9. java数据挖掘算法_[转载]干货,基于Java和C++的数据挖掘Apriori算法实现

    Apriori算法实现 Apriori算法的思想还是很容易理解的,实现起来虽然麻烦,但是还是比较容易的.下面是我使用Java语言实现的Apriori算法,实现了AprioriAlgorithm 类,包 ...

最新文章

  1. 建设公司的技术+企业客户的沟通=极致运行的网站
  2. 二、制作最小linux系统
  3. chrome浏览器net::ERR_TOO_MANY_REDIRECTS
  4. 钉钉微应用怎么进入_蓝凌携手钉钉走进越秀地产,零距离热聊企业数字化转型...
  5. 如何使用 C# 在异步代码中处理异常
  6. 257. 二叉树的所有路径 golang
  7. 记录使用IDEA部署Tomcat时提示错误:the selected directory is not a TomEE home
  8. 《Finite-Element Neural Networks for Solving Differential Equations》梳理
  9. python 统计英文词频
  10. 快速写出matlab的GUI程序
  11. 如何解决VC++ 6.0 在win7下的兼容性问题
  12. 【4】求最大奇数公约数
  13. codeigniter mysql 存储过程_Codeigniter框架使用Mysql存储过程的例子
  14. BZOJ P1059 [ZJOI2007]矩阵游戏——solution
  15. 设计并搭建Python容器化项目的CI/CD流水线
  16. 搭建一个tomcat的JSP服务器环境
  17. CS231n李飞飞计算机视觉 循环神经网络
  18. Visio自定义连接线,连接点位置
  19. c语言感叹号和逗号标红,感叹号不够用?试试感叹逗号
  20. Typescript中定义接口(interface)

热门文章

  1. 手机相机图像对比工具开发
  2. 高性能服务通信框架Gaea的详细实现--server请求处理流程
  3. 【交换机】设置交换机端口速率和传输模式(全/半双工)
  4. AppCenter Code Push热更新
  5. sqlserver触发器的使用以及inserted和deleted详解
  6. (14.1)Nginx日志分析项目实战
  7. CSS伪元素的基本使用
  8. HMM经典介绍论文【Rabiner 1989】翻译(三)——抛硬币实验和碗中的球实验
  9. 3、mysql索引优化一:Explain关键字分析
  10. 802.1Q VLAN技术原理