输入数据格式

25 52 164 240 274 328 368 448 538 561 630 687 730 775 825 834

39 120 124 205 401 581 704 814 825 834

35 249 674 712 733 759 854 950

39 422 449 704 825 857 895 937 954 964

15 229 262 283 294 352 381 708 738 766 853 883 966 978

具体函数解释

1. createC1(dataSet)

创建候选1项集,各item及其support存储在字典中

def createC1(dataSet):

C1_dict = {} # 物品清单

C1 = []

for items in dataSet:

for item in items:

if item in C1_dict:

C1_dict[item] += 1.; #数字当字典的key

else:

C1_dict[item] = 1.;

for key in C1_dict:

C1.append([key])

print("C1: ",C1)

return C1 #list(C1.keys()) 相等于 list(map(frozenset,C1))

# C1 = createC1(dataSet)

# print("C1:",C1) # C1: [[25], [52], [164], [240], [274]]

2. selectLk(dataSet,Ck,minSupport)

寻找k-频繁项集

def selectLk(dataSet,Ck,minSupport): #dataSet 原始数据集

scan = {} #字典:存候选项集及其支持度

for tid in dataSet:

# print("tid:",tid) # tid: [33, 217, 283, 346, 496, 515, 626]

for item in Ck: # item: [29] [1,2]

if set(item).issubset(tid): # 转换list to set 判断是否为原数据集各tid的子集

item = list(map(str, item))

item = ','.join(item)

if item not in scan.keys():

scan[item] = 1

else:

scan[item] += 1

numItems = float(len(dataSet))

# retList = [] # 频繁项集

Lk = {}

supportData = {} # 候选项集(ssCnt)的支持度的字典

for key in scan:

support = scan[key] / numItems

#supportData[key] = support

if support >= minSupport:

Lk[key] = support;

# return retList,supportData #retList -> Lk L1: {'368': 0.08, '120': 0.056}

return Lk

3. createCk(Lk,k)

创建k+1-候选项集

def createCk(Lk,k): # Lk:包含k项的频繁项集

Ck = []

Lk = list(Lk.keys())

print("Lk:",Lk) # Lk: ['368', '120', '283', '766', '529', '217', '177', '354', '684', '829', '460', '438']

lenLk = len(Lk)

for i in range(lenLk):

for j in range(i+1,lenLk):

#前k-2个项相同时,将两个集合合并

L1 = Lk[i].split(',') # str to list[str]

L1 = list(map(int, L1)) #list[str] to list[int]

L1pre = (L1)[:k-2]

L1pre.sort();

L2 = Lk[j].split(',')

L2 = list(map(int, L2))

L2pre = (L2)[:k-2]

L2pre.sort()

if L1pre == L2pre:

Ck.append(list(set(L1).union(set(L2))))

print("Ck: ",Ck)

return Ck

def apriori(dataSet,minSupport):

C1 = createC1(dataSet);

L1 = selectLk(dataSet,C1,minSupport) #L1 是字典

L = [L1]

k = 2

while(len(L[k-2]) > 0):

Ck = createCk(L[k-2],k)

Lk= selectLk(dataSet,Ck,minSupport)

L.append(Lk)

k += 1

return L

from pprint import pprint

dataSet = loadDataSet() #原始数据集转换为二维list格式

L = apriori(dataSet,0.01)

pprint(L)

4. 将频繁项集存入Excel

# write list[dictionary] to an excel file

workbook = xlsxwriter.Workbook('out.xlsx')

worksheet = workbook.add_worksheet()

row = 0

col = 0

worksheet.write(row, col, "Itemset")

worksheet.write(row, col+1, "Support")

for items in L:

for key in items.keys():

row += 1

worksheet.write(row, col, key)

worksheet.write(row, col + 1, items[key])

workbook.close()

apriori算法代码python_Apriori算法的Python实现相关推荐

  1. apriori算法代码python_Apriori算法原理及Python代码

    一.Apriori算法原理 参考:Python --深入浅出Apriori关联分析算法(一)​www.cnblogs.com 二.在Python中使用Apriori算法 查看Apriori算法的帮助文 ...

  2. din算法 代码_DIN算法代码详细解读

    首先给出论文的地址:Deep Interest Network for Click-Through Rate Prediction 然后给出两篇对论文进行了详细介绍的文章: 王喆:推荐系统中的注意力机 ...

  3. 关联规则算法(Apriori算法 and FP-growth算法)

    文章目录 前言 Apriori算法 代码 FP-growth算法 代码 前言 由于学习关联规则时没有找到比较浅显易懂的博客,于是打算自己写一篇快速了解关联规则的博客 参考的博客: FP-growth算 ...

  4. apriori算法代码_资源 | 《机器学习实战》及代码(基于Python3)

    〇.<机器学习实战> 今天推荐给大家的是<机器学习实战>这本书. 机器学习作为人工智能研究领域中一个极其重要的研究方向(一文章看懂人工智能.机器学习和深度学习),在当下极其热门 ...

  5. python必备基础代码-机器学习算法基础(使用Python代码)

    介绍 谷歌的自动驾驶汽车和机器人受到了很多媒体的关注,但该公司真正的未来是在机器学习领域,这种技术能使计算机变得更聪明,更个性化.-Eric Schmidt(Google董事长) 我们可能生活在人类历 ...

  6. python实现关联算法_关联规则算法Apriori学习及Python实现

    关联规则算法Apriori以及FP-growth学习 最近选择了关联规则算法进行学习,目标是先学习Apriori算法,再转FP-growth算法,因为Spark-mllib库支持的关联算法是FP,随笔 ...

  7. 手把手教你深度学习强大算法进行序列学习(附Python代码)

    作者:NSS 翻译:陈之炎 校对:丁楠雅 本文共3200字,建议阅读10分钟. 本文将教你使用做紧致预测树的算法来进行序列学习. 概述 序列学习是近年来深度学习的热点之一.从推荐系统到语音识别再到自然 ...

  8. 机器学习经典分类算法 —— C4.5算法(附python实现代码)

    目录 理论介绍 什么是分类 分类的步骤 什么是决策树 决策树归纳 信息增益 相关理论基础 计算公式 ID3 C4.5 python实现 参考资料 理论介绍 什么是分类 分类属于机器学习中监督学习的一种 ...

  9. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

最新文章

  1. I210网卡LINUX的mac,linux i210 网卡驱动解读
  2. linux pxe获取ip,linux pxe的构建
  3. citrix创建虚拟机服务器,在 ESXi 服务器上安装并配置 Citrix SD-WAN Center
  4. 一文搞懂重复测量资料分析
  5. DLA SQL技巧:行、列转换和JSON数据列展开
  6. Introduction to dnorm, pnorm, qnorm, and rnorm for new biostatisticians
  7. java floormod_Java中 % 与Math.floorMod() 区别详解
  8. 电脑维修的基本原则和方法
  9. 如何保存gif表情包里面的部分图片?
  10. FlyoutMenus
  11. 做淘宝页面前的基础准备
  12. pycharm远程连接服务器防止ssh连接中断
  13. 从SEO优化角度打造移动端网站的移动建站指南
  14. 海思HI3536 audio 双声道播放音频
  15. Word2007插入目录、更新目录后大纲乱掉和无法保存大纲的解决办法
  16. 同步辐射X射线断层扫描成像技术的应用领域和场景
  17. 快速搭建Spring BlazeDS Integration框架环境
  18. 运营入门:全攻略,且不仅是入门
  19. uniapp获取视频时长
  20. CAN总线波特率计算及设置方法(STM32,SJA1000,LPC2292)

热门文章

  1. 音视频技术开发周刊 | 196
  2. 专访快手传输算法负责人周超博士:LAS标准的推出离不开信念感
  3. Akamai Martin Horčička:最新网络优化技术及编程语言分析
  4. Hulu兰华峰:专注平衡用户体验和成本
  5. 2023年多播ABR市场将达8亿美元
  6. Java代码简化之朗母达表达式(Lambda Express)
  7. 《视频直播技术详解》之(四):编码和封装
  8. 解决github图片不显示问题【完美解决】
  9. Linux Shell 文本处理工具集锦
  10. leetcode 304. Range Sum Query 2D - Immutable |304. 二维区域和检索 - 矩阵不可变(二维前缀和问题)