代码中Ci表示候选频繁i项集,Li表示符合条件的频繁i项集
  
  # coding=utf-8
  
  def createC1(dataSet): # 构建所有1项候选项集的集合
  
  C1 = []
  
  for transaction in dataSet:
  
  for item in transaction:
  
  if [item] not in C1:
  
  C1.append([item]) # C1添加的是列表,对于每一项进行添加,[[1], [2], [3], [4], [5]]
  
  #print('C1:',C1)
  
  return list(map(frozenset, C1)) # 使用frozenset,被“冰冻”的集合,为后续建立字典key-value使用。
  
  ###由候选项集生成符合最小支持度的项集L。参数分别为数据集、候选项集列表,最小支持度
  
  ###如
  
  ###C3: [frozenset({1, 2, 3}), frozenset({1, 3, 5}), frozenset({2, 3, 5})]
  
  ###L3: [frozenset({2, 3, 5})]
  
  def scanD(D, Ck, minSupport):
  
  ssCnt = {}
  
  for tid in D: # 对于数据集里的每一条记录
  
  for can in Ck: # 每个候选项集can
  
  if can.issubset(tid): # 若是候选集can是作为记录的子集,那么其值+1,对其计数
  
  if not ssCnt.__contains__(can): # ssCnt[can] = ssCnt.get(can,0)+1一句可破,没有的时候为0,加上1,有的时候用get取出,加1
  
  ssCnt[can] = 1
  
  else:
  
  ssCnt[can] += 1
  
  numItems = float(len(D))
  
  retList = []
  
  supportData = {}
  
  for key in ssCnt:
  
  support = ssCnt[key] / numItems # 除以总的记录条数,即为其支持度
  
  if support >= minSupport:
  
  retList.insert(0, key) # 超过最小支持度的项集,将其记录下来。
  
  supportData[key] = support
  
  return retList, supportData
  
  ###由Lk生成K项候选集Ck
  
  ###如由L2: [frozenset({3, 5}), frozenset({2, 5}), frozenset({2, 3}), frozenset({1, 3})]
  
  ###生成
  
  ###C3: [frozenset({1, 2, 3}), frozenset({1, 3, 5}), frozenset({2, 3, 5})]
  
  def aprioriGen(Lk, k):
  
  retList = []
  
  lenLk = len(Lk)
  
  for i in range(lenLk):
  
  for j in range(i + 1,lenLk):
  
  if len(Lk[i] | Lk[j])==k:
  
  retList.append(Lk[i] | Lk[j])
  
  return list(set(retList))
  
  ####生成所有频繁子集
  
  def apriori(dataSet, minSupport=0.5):
  
  C1 = createC1(dataSet)
  
  D = list(map(set, dataSet))
  
  L1, supportData = scanD(D, C1, minSupport)
  
  L = [L1] # L将包含满足最小支持度,即经过筛选的所有频繁n项集,这里添加频繁1项集
  
  k = 2
  
  while (len(L[k - 2]) > 0): # k=2开始,由频繁1项集生成频繁2项集,直到下一个打的项集为空
  
  Ck = aprioriGen(L[k - 2], k)
  
  Lk, supK = scanD(D, Ck, minSupport)
  
  supportData.update(supK) # supportData为字典,存放每个项集的支持度,并以更新的方式加入新的supK
  
  L.append(Lk)
  
  k += 1
  
  return L, supportData
  
  if __name__ == "__main__":
  
  dataSet = [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
  
  D = list(map(set, dataSet))
  
  L,suppData = apriori(dataSet)
  
  print('L:',L)
  
  print('suppData:',suppData)
  
  '''
  
  C1 = createC1(dataSet)
  
  L1, supportData1 = scanD(D, C1, 0.5)
  
  print('C1:',C1)
  
  print('L1:',L1)
  
  print('supportData1:',supportData1)
  
  C2 = aprioriGen(L1, 2)
  
  L2, supportData2 = scanD(D, C2, 0.5)
  
  print('C2:',C2)
  
  print('L2:',L2)
  
  print('supportData2:www.gcyl152.com/',supportData2)
  
  C3 = aprioriGen(L2, 3)
  
  L3, supportData3 www.michenggw.com= scanD(D, C3, 0.5)
  
  print('C3:',C3)
  
  print('L3:',L3)
  
  print('supportData3:',supportData3)
  
  '''
  
  最终得到的所有支持度大于0.5的频繁子集及其支持度如下:
  
          frozenset({1})www.mcyllpt.com/ : 0.5, 
  
          frozenset({3}): 0.75, 
  
          frozenset({4}): 0.25, 
  
          frozenset({2}): 0.75, 
  
          frozenset({5}): 0.75, 
  
          frozenset({1, 3}): 0.5, 
  
          frozenset({2, 3}): 0.5, 
  
          frozenset({2, 5}): 0.75, 
  
          frozenset({3, 5}): 0.5, 
  
          frozenset({1, 2}): 0.25, 
  
          frozenset({1, 5}): 0.25, 
  
          frozenset({2, 3, 5}): 0.5, 
  
          frozenset({1, 2, 3}): 0.25, 
  
          frozenset({1, 3, 5}): 0.25

python实现关联规则的更多相关文章

  1. 关联规则 -- apriori 和 FPgrowth 的基本概念及基于python的算法实现

    apriori 使用Apriori算法进行关联分析 貌似网上给的代码是这个大牛写的 关联规则挖掘及Apriori实现购物推荐  老师 Apriori 的python算法实现 python实现关联规则  ...

  2. python调用R语言,关联规则可视化

    首先当然要配置r语言环境变量什么的 D:\R-3.5.1\bin\x64; D:\R-3.5.1\bin\x64\R.dll;D:\R-3.5.1;D:\ProgramData\Anaconda3\L ...

  3. Python机器学习算法 — 关联规则(Apriori、FP-growth)

    关联规则 -- 简介 关联规则挖掘是一种基于规则的机器学习算法,该算法可以在大数据库中发现感兴趣的关系.它的目的是利用一些度量指标来分辨数据库中存在的强规则.也即是说关联规则挖掘是用于知识发现,而非预 ...

  4. Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战

    上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度.以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集. Python --深入浅出Apriori关联分析算法(一) 这次 ...

  5. Python两步实现关联规则Apriori算法,参考机器学习实战,包括频繁项集的构建以及关联规则的挖掘

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  6. [Python数据挖掘]第8章、中医证型关联规则挖掘

    一.背景和挖掘目标 二.分析方法与过程 1.数据获取 2.数据预处理  1.筛选有效问卷(根据表8-6的标准) 共发放1253份问卷,其中有效问卷数为930  2.属性规约 3.数据变换 ''' 聚类 ...

  7. python实现简单关联规则Apriori算法

    from itertools import combinations from copy import deepcopy # 导入数据,并剔除支持度计数小于min_support的1项集 def lo ...

  8. Python 和 R 数据分析/挖掘工具互查

    如果大家已经熟悉python和R的模块/包载入方式,那下面的表查找起来相对方便.python在下表中以模块.的方式引用,部分模块并非原生模块,请使用 pip install * 安装:同理,为了方便索 ...

  9. Python实现Apriori

    Python实现Apriori 运行环境 Pyhton3 计算过程 st=>start: 开始 e=>end: 结束 op1=>operation: 读入数据 op2=>ope ...

随机推荐

  1. 【mvrp多协议vlan注册协议给予三种注册方式的验证】

    MVRP 多vlan注册协议给予三种注册模式的配置 一:根据项目需求搭建好拓扑图如下 二:配置: 首先对项目做理论分析,sw1,sw2,sw3所组成的直连网络中,为使不同的PC之间进行通信,按vlan ...

  2. MySql指令的执行顺序

    1:From 2:On 3:Join 4:Where 5:Group by 5.1:函数 6:Having 7:Select 8:Distinct 9:Order by

  3. 禁止鼠标点右键 - 防止刷新页面 - 禁止复制 chrome 和 firefox不能复制

    document.oncontextmenu = function () {//点右键,啥反应都没有了 return false; } document.onkeydown = function () ...

  4. YII2 不通过composer安装Ueditor编辑器

    今天用composer安装Ueditor,一直下载失败,不知道为什么,所以就手动安装了一下.记录一下安装步骤 GitHub地址 https://github.com/BigKuCha/yii2-ued ...

  5. SpringBoot学习(1)

    springboot的自动配置功能,主要流程如下: 1 启动的时候加载我们的主配置类,也就是我们的入口类:从而开启我们的自动配置配置功能,这个是通过@EnableAutoConfiguration注解 ...

  6. json模块、os模块

    一.eval模拟序列化操作 1.序列化 内存中的数据-------->转成一种中间格式(字符串)---------->存到文件中 dic={'name':'egon','age':18} ...

  7. 用 Qt 控制 Nikon 显微镜的电动物镜转盘

    用 Qt 控制 Nikon 显微镜的电动物镜转盘 最近的一个项目,用到了一台 Nikon 的金相显微镜,并且配了个电动的物镜转盘.为了控制这个电动物镜转盘,我折腾了差不多有4-5天.中间遇到了各种问题 ...

  8. define 和 const常量有什么区别?

    define在预处理阶段进行替换,const常量在编译阶段使用 宏不做类型检查,仅仅进行替换,const常量有数据类型,会执行类型检查 define不能调试,const常量可以调试 define定义的 ...

  9. [转]Visual Studio 项目类型 GUID 清单

    转自:https://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs Complete li ...

  10. Mootools 学习随笔

    简单的介绍下Mootools: MooTools是一个简洁,模块化,面向对象的开源JavaScript web应用框架.在处理js.css.html时候,为web开发者提供了一个跨浏览器的js解决方案 ...