本实验包含以下内容:

学习挖掘频繁项集,掌握apriori算法

1.实现用apriori算法挖掘频繁项集(最小支持度计数2)

2.分析你所实现的apriori算法的缺点

3. 数据集:

数据集
TID 项集
T100 I1,I2,I5
T200 I2,I4
T300 I2,I3
T400 I1,I2,I4
T500 I1,I3
T600 I2,I3
T700 I1,I3
T800 I1,I2,I3,I5
T900 I1,I2,I3

代码如下:

# 录入数据
def data_fetch():data = [['l1', 'l2', 'l5'],['l2', 'l4'],['l2', 'l3'],['l1', 'l2', 'l4'],['l1', 'l3'],['l2', 'l3'],['l1', 'l3'],['l1', 'l2', 'l3', 'l5'],['l1', 'l2', 'l3']]return data# 根据项目,寻找支持度计数
def xunzhao(s, L):k = len(s) - 1  # 根据项目长度,决定在频繁几项集中寻找if k < 0:  # s为空的情况print(s, '不是有效输入')# 标志变量,如果s中的项目有和当前比较的不同的,就置0;t = 0for i in range(len(L[k])):  # 遍历频繁k项集t = 1for j in range(k + 1):  # 开始比较是不是该项目if L[k][i][0][j] != s[j]:t = 0breakif t:return L[k][i][1]  # 是的话,返回该项目的支持度计数print('未找到')  # 遍历结束的话说明未找到return -1  # 返回 -1 (无)# 得到划分,并顺便求出置信度
def huafen(L, l, conf):  # 划分得到置信度X = l[0]  # 需要划分的列表lx = len(X)  # 长度# 用二进制的性质求真子集for i in range(1, 2 ** lx - 1):s1 = []s2 = []for j in range(lx):# 二进制末尾是0就进s1,否则就进s2达到划分目的if (i >> j) % 2:s1.append(X[j])else:s2.append(X[j])conf[str(s1), '->', str(s2)] = l[1] / xunzhao(s1, L)# 判断s中的数据在data中的数目
def jishu(s, data):c = 0  # 记录出现数目# 标志变量,如果s中的数据有在data这一行不存在的,就置0;t = 0for ii in data:  # 数据每一行t = 1for jj in s:  # 对于 s 中的每一个项if not (jj in ii):t = 0breakc += t  # 如果 s 在这一行存在,c++return c# 输入频繁k-1项集,支持度计数,数据,输出频繁k项集
def Apriori(L, N, data):if not L:return LL_ = []  # 频繁k项集L = [i[0] for i in L]  # k-1项集包含哪些k = len(L[0]) + 1  # 几项集L_len = len(L)up = k - 2  # 拼接同项长度i = 0while i < L_len - 1:  # 只剩最后一个时肯定没法拼A = L[i][0:up]  # 拼接前项c = i  # 记录走到那个前项了i += 1  # i 到下一个for j in range(c + 1, L_len):if L[j][0:up] != A:  # 前几项不一致就停止i = j  # i 快进到发现新键值的地方breakelse:  # 前几项一致时s = L[c] + L[j][up:]  # 生成预选项t = jishu(s, data)  # 得到 s 的支持度计数if t >= N:  # 支持度计数大于NL_.append([s, t])  # 添加到频繁项集中return L_data = data_fetch()  # 生成数据,存到data
N = 2  # 支持度计数
L = {}  # 储存一项集
for i in data:  # 得到所有的一项集for j in i:if j in L:L[j] += 1else:L[j] = 1
L_1 = []  # 储存频繁一项集
for i in L.keys():  # 取其中所有的频繁集if L[i] >= N:L_1.append([[i], L[i]])
L = []  # 频繁1~4项集
L.append(sorted(L_1, key=lambda x: x[0]))  # 按键值排序转为列表
print('频繁 1 项集', L[0])
for i in range(3):L.append(Apriori(L[i], N, data))  # 求频繁2项集print('频繁', i + 2, '项集', L[i + 1])
# 置信度计算 ===============================================
conf = {}  # 储存置信度
# 对每一个k项集分析
print('置信度:============================================')
for i in L[1:len(L)]:  # 频繁1项集不用看for j in i:huafen(L, j, conf)  # 划分得到置信度
for key in conf:print(key,conf[key]*100,'%')

结果示例:

频繁 1 项集 [[['l1'], 6], [['l2'], 7], [['l3'], 6], [['l4'], 2], [['l5'], 2]]
频繁 2 项集 [[['l1', 'l2'], 4], [['l1', 'l3'], 4], [['l1', 'l5'], 2], [['l2', 'l3'], 4], [['l2', 'l4'], 2], [['l2', 'l5'], 2]]
频繁 3 项集 [[['l1', 'l2', 'l3'], 2], [['l1', 'l2', 'l5'], 2]]
频繁 4 项集 []
置信度:============================================
("['l1']", '->', "['l2']") 66.66666666666666 %
("['l2']", '->', "['l1']") 57.14285714285714 %
("['l1']", '->', "['l3']") 66.66666666666666 %
("['l3']", '->', "['l1']") 66.66666666666666 %
("['l1']", '->', "['l5']") 33.33333333333333 %
("['l5']", '->', "['l1']") 100.0 %
("['l2']", '->', "['l3']") 57.14285714285714 %
("['l3']", '->', "['l2']") 66.66666666666666 %
("['l2']", '->', "['l4']") 28.57142857142857 %
("['l4']", '->', "['l2']") 100.0 %
("['l2']", '->', "['l5']") 28.57142857142857 %
("['l5']", '->', "['l2']") 100.0 %
("['l1']", '->', "['l2', 'l3']") 33.33333333333333 %
("['l2']", '->', "['l1', 'l3']") 28.57142857142857 %
("['l1', 'l2']", '->', "['l3']") 50.0 %
("['l3']", '->', "['l1', 'l2']") 33.33333333333333 %
("['l1', 'l3']", '->', "['l2']") 50.0 %
("['l2', 'l3']", '->', "['l1']") 50.0 %
("['l1']", '->', "['l2', 'l5']") 33.33333333333333 %
("['l2']", '->', "['l1', 'l5']") 28.57142857142857 %
("['l1', 'l2']", '->', "['l5']") 50.0 %
("['l5']", '->', "['l1', 'l2']") 100.0 %
("['l1', 'l5']", '->', "['l2']") 100.0 %
("['l2', 'l5']", '->', "['l1']") 100.0 %进程已结束,退出代码为 0

总结:

生成备选频繁项集时,没有充分利用频繁项集的子集也属于频繁项集的性质,导致有一些冗余。

使用python挖掘频繁项集相关推荐

  1. 河北工业大学数据挖掘实验三 应用 Apriori 算法挖掘频繁项集

    河北工业大学数据挖掘实验三 应用 Apriori 算法挖掘频繁项集 一.实验目的 二.实验原理 1.Apriori 算法 2.提高频繁项集逐层产生的效率 三.实验内容和步骤 1.实验内容 2.实验步骤 ...

  2. python 频繁项集_Apriori算法:从数据中挖掘频繁项集

    简介 Apriori是一种流行的算法,用于在关联规则学习中提取频繁项集.Apriori算法被设计用于对包含交易的数据库进行操作,例如商店客户的购买.如果项目集满足用户指定的支持阈值,则该项目集被视为& ...

  3. Apriori算法挖掘频繁项集

    用Apriori或者FP-growth算法挖掘出所有的频繁项集,并写出具体的实现代码.假设事务数据库D表1:最小支持度计数为2. 下图是以Apriori算法为例.       表1 事务数据库D Ti ...

  4. FP-growth:从FP树中挖掘频繁项集

    前言 若想具体理解FP-growth,请参阅这位大神的作品: https://www.cnblogs.com/pinard/p/6307064.html 本文的前一节<FP-growth:构建F ...

  5. 基于Python的购物篮频繁项集数据挖掘分析系统

    目 录 第一章 绪论 1 1.1 选题背景与研究意义 1 1.2 应用领域 1 1.3 主要研究内容 2 1.4 论文组织结构 2 第二章 理论基础 4 2.1 数据挖掘 4 2.2 频繁项集 5 2 ...

  6. 频繁项集挖掘之apriori和fp-growth

    Apriori和fp-growth是频繁项集(frequent itemset mining)挖掘中的两个经典算法,主要的区别在于一个是广度优先的方式,另一个是深度优先的方式,后一种是基于前一种效率较 ...

  7. 频繁项集挖掘算法——Eclat算法

    前面介绍过的Apriori算法和FP-growth算法都是从TID项集格式(即{TID:itemset})的事务集中挖掘频繁模式,其中TID是事务标识符,而itemset是事务TID中购买的商品.这种 ...

  8. 数据挖掘之Apriori频繁项集挖掘

    本文的代码文件原件可以在我们的 "数据臭皮匠" 中输入"第六章1" 拿到 1.基本概念介绍 频繁项集和关联规则的挖掘首先需要了解一些概念, 如支持度, 置信度, ...

  9. python 频繁项集_频繁项集算法Eclat

    Equivalence Class Transformation(Eclat)是频繁项挖掘和关联性分析的另外一种常用的算法,与Apriori和FP-growth不同的是,Eclat采用垂直数据格式.所 ...

最新文章

  1. 第02课:深度学习 Python 必备知识点
  2. python爬取豆瓣电影top250_Python爬虫 - scrapy - 爬取豆瓣电影TOP250
  3. 数值的加减会改变python中id,在python中调用Nan值并更改为数字
  4. php protected const,关于const:PHP类常量 – 公共,私有还是受保护?
  5. 问题的分析与解决(培训总结)
  6. ECshop新手入门模板制作教程[转载]
  7. 计算机画图虚线,天正建筑怎么把直线变成虚线
  8. php设备巡检管理,设备巡检管理:你必须知道的4个玩法
  9. it是什么行业?具体又包括哪些细分领域呢?
  10. 什么样的文案才算是好文案?
  11. 【JavaScript 逆向】webpack 之某妹游戏登录逆向
  12. 行业报告归档 2017.3.21
  13. win7c盘空间越来越小:C盘哪些文件可以清理删除呢
  14. 关于CAJViewer阅读器如何修改做标记的颜色?
  15. RFID防盗安全门在图书馆的应用
  16. 推荐六个在线生成网址二维码的API接口
  17. MFC开发之静态文本框实现编辑框滚动显示文字效果
  18. Unity3D游戏编程-鼠标打飞碟
  19. 用计算机写一份心得体会,计算机心得体会范文
  20. 公司安排不合理的出差,可以不同意吗

热门文章

  1. 物流公司运输最优路线问题
  2. mysql 表情符号_emoji等表情符号存mysql的方法
  3. 数据库关系运算范式分解例题
  4. webots-Controller Programming
  5. matlab mat2gray函数 对图像数据归一化的理解以及互转
  6. Python Crash Course读书笔记 - 第16章:DOWNLOADING DATA
  7. Sicily课程练习 1012. 叠罗汉
  8. samba配置注意问题
  9. pbootcms自动配图出图插件
  10. 如何从零基础开始学习搭建小程序?