目标

数据库有5个事务。设min_sup=60%,min_conf=80%。
TID 购买的商品
T100 {M,O,N,K,E,Y}
T200 {D,O,N,K,E,Y}
T300 {M,A,K,E}
T400 {M,U,C,K,Y}
T500 {C,O,O,K,I,E}

算法思想

算法 Apriori。使用逐层迭代方法基于候选找出频繁集。
输入:
D:事务数据库。
min_sup:最小支持度阈值
输出:L,D中的频繁项集。
方法:
(1)=find_frequent_1_itemsets(D);
(2)for(k=2;){
(3)=aproiri_gen();
(4) for each 事务tD{
(5)=subset(,t);
(6) for each 候选c
(7) C.count++;
(8) }
(9) ={c(|c.countmin_sup)}
(10)}
(11)return L=;
pocedure apriori_gen(:frequent(k-1)itemset)
(1) for each项集
(2) for each项集
(3) if(=)(=)(=)then{
(4) c=; //连接步:产生候选
(5) If has_infrequent_subset(c,) then
(6) delete c; //剪纸步:删除非频繁的候选
(7) esle add c to ;
(8)}
(9)return ;
procedure has_infrequent_subset(c: candidate k itemset;:frequent(k-1)itemset)
//使用先验知识
(1)for each(k-1)subset s of c
(2) if sthen
(3) return TRUE
(4)return FALSE

def find_frequent_1_itemsets(data, support):"""计算频繁一项集"""min_sup = len(data) * supportitemsets = {}for d in data:for vlist in d.values():for value in vlist:if value in itemsets.keys():itemsets[value] += 1else:itemsets[value] = 1print("候选一项集:")print(itemsets)for key in list(itemsets.keys()):if itemsets[key] < min_sup:itemsets.pop(key)print("频繁一项集:")print(itemsets)return itemsetsdef remove_samekey(this_itemsets):"""仅保留一个类似(k,e,m)和(e,k,m)这种相同的键"""key_list = this_itemsets.keys()new_list1 = []new_list2 = []new_itemsets = {}for ele in key_list:if set(ele) not in new_list1:new_list1.append(set(ele))else:continue# 把new_list中的集合换成元组for ele in new_list1:new_list2.append(tuple(ele))# 得到去重的集合for ele in new_list2:new_itemsets[ele] = this_itemsets[ele]return new_itemsetsdef find_frequent_next_itemsets(data, frequent_n_itemsets, support):"""从n项集找n+1项集"""min_sup = len(data) * supportn_itemlist = list(frequent_n_itemsets)print(n_itemlist)itemsets = {}  # 候选n+1项集m = len(n_itemlist[0])  # 判断该项集是几项集for ele1 in n_itemlist:for ele2 in n_itemlist:if ele1 != ele2:if len(ele1) == 1:  # 当n=1时,此时每一项都是单项if (ele1, ele2) in itemsets.keys():continueelse:itemsets[(ele1, ele2)] = 0else:  # 当n>1时,此时每一项都是一个元组for e in ele2:if e not in ele1:new_ele = ele1 + (e,)if new_ele in itemsets.keys():continueelse:itemsets[new_ele] = 0else:continueprint((m + 1), "候选项集为:")itemsets=remove_samekey(itemsets)print(itemsets)for item1 in data:for item2 in itemsets.keys():if (set(item2) <= set(*item1.values())):itemsets[item2] += 1else:continueprint("处理后的", (m + 1), "候选项集为:")print(itemsets)for key in list(itemsets.keys()):if itemsets[key] < min_sup:itemsets.pop(key)print("频繁", m + 1, "项集:")print(itemsets)return itemsets"""对数据进行初始化"""
data = [{"T100": ['M', 'O', 'N', 'K', 'E', 'Y']},{"T200": ['D', 'O', 'N', 'K', 'E', 'Y']},{"T300": ['M', 'A', 'K', 'E']},{"T400": ['M', 'U', 'C', 'K', 'Y']},{"T500": ['C', 'O', 'O', 'K', 'I', 'E']}
]
support = 0.6
itemsets = find_frequent_1_itemsets(data, support)
while len(itemsets)>1:itemsets = find_frequent_next_itemsets(data, itemsets, support)

结果


以上

Apriori算法找出频繁项集(python)相关推荐

  1. Apriori关联分析与频繁项集

    Apriori关联分析与频繁项集 关联分析是一种在大规模数据集中寻找关系的任务.这些关系可以有两种形式:频繁项集或者关联规则.频繁项集(frequent item sets)是经常出现在一块的物品的集 ...

  2. FP-growth算法高效发现频繁项集

    在用搜索引擎时,我们发现输入单词的一部分时,搜索引擎会自动补全查询词项,这里的原理其实是通过查询互联网上的词来找出经常出现在一块的词对,这需要一种高效发现频繁集的方法. 它基于Apriori构建,但在 ...

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

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

  4. 数据挖掘---频繁项集挖掘Apriori算法的C++实现

    1 准备   首先实现这个算法是基于中南大学软件学院数据挖掘课的上机作业.作业(全英文)下载地址:http://download.csdn.net/detail/freeape/9188451 2 作 ...

  5. 12使用FP-growth算法来高效发现频繁项集

    第12章 使用FP-growth算法来高效发现频繁项集 一.背景 大家都用过搜索引擎.当我们输入一个单词或单词的一份,搜索引擎就会自动补全查询词项.例如:当我们在百度输入"为什么" ...

  6. 机器学习-使用FP-Growth算法来高效发现频繁项集

    FP-Growth算法是这里要介绍的第三个非监督学习算法,FP(Frequent Pattern)代表频繁模式.FP-Growth算法相对于Apriori算法来说效率更高,其只需要对数据集进行两轮扫描 ...

  7. apriori算法_挖掘频繁模式、关联和Apriori算法

    挖掘频繁模式.关联和Apriori算法 1. 引入 1.1 基本概念 频繁模式:频繁出现在数据集中的模式 频繁模式挖掘:获取到给定数据集中反复出现的联系 注:模式其实可以理解为,你在淘宝购物,你的购物 ...

  8. 关联分析(一):频繁项集及规则产生

    关联分析用于发现隐藏在大型数据集中有意义的联系,属于模式挖掘分析方法,其为人熟知的经典应用当属沃尔玛超市里"啤酒与尿布"的关系挖掘了.关联分析的应用领域非常多,当数据集类型比较复杂 ...

  9. 频繁项集挖掘实战和关联规则产生

    在上篇文章<数据挖掘之Apriori频繁项集挖掘>中我们用代码手工实现了Apriori算法, 用<数据挖掘概念与技术>中的数据做检验,和书中结果一致.本篇文章, 我们基于一个更 ...

最新文章

  1. IBMDB2数据库软件安装教程
  2. SpringMVC框架 学习DAY_02 : 接收请求参数/向模板页面转发数据/重定向与转发 /Session
  3. Android --- TabLayout 切换时,改变选项卡下字体的状态(大小、加粗、默认被选中第一个)
  4. linux服务器视窗,linux窗口管理器介绍
  5. [word技巧]把标题、图表题注编号由“一.1”改为“1.1“
  6. wordpress目录文件结构
  7. 《你不知道的JavaScript》学习佛系梳理
  8. oracle加字段卡住,oracle添加字段引起的问题
  9. Eclipse代码/目录虚线对齐设置
  10. 19.数学与经济管理
  11. java 假设检验_据说假设检验是个很难的题
  12. 7-2 寻找大富翁 (25 分)
  13. laravel中外部定义whereIn的用法和where中使用in
  14. vue中echarts使用案例:饼图(可直接使用)
  15. 云服务器操作系统 版本选择,云服务器选择操作系统版本
  16. 为什么敲了许多年的代码,却仍然在原地踏步?| 程序员有话说
  17. rust墙壁升级点什么_明日之后屋子墙壁怎么升级?墙壁升级条件方法一览
  18. Linux下海康威视工业相机的SDK二次开发
  19. Spark2.10中使用累加器、注意点以及实现自定义累加器
  20. 马云再次成功了!刚刚,阿里巴巴正式宣布再出两大产品!

热门文章

  1. DM数据库基本操作命令
  2. 两个网口芯片接一个变压器_网口变压器的工作原理
  3. The JTAG/SMC Hack On Xbox360
  4. Navicat Premium 12 免安装版
  5. 用js模拟一个简单敏感词过滤器
  6. 使用cordova把h5应用打包成apk
  7. GNSS 差分定位技术
  8. 企业内部培训——华微软件的培训制度
  9. 每日学习参考答案(1000-1021)
  10. 【2019】H5背景音乐解决方案