频繁项集挖掘Apriori算法及其Python实现
来源:互联网 发布:squid安装到linux 编辑:程序博客网 时间:2024/06/04 18:48
Apriori算法是通过限制候选产生发现频繁项集。
Apriori算法使用一种称为逐层搜索的迭代方法,其中k项集用于探索(k+1)项集。首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合,记为L1。然后,使用L1找出频繁2项集的集合L2,使用L2找出L3,如此下去,直到不能再找到频繁k项集。
为了提高频繁项集逐层产生的效率,一种称为先验性质(Apriori property)的重要性质用于压缩搜索空间。
先验性质:频繁项集的所有非空子集也一定是频繁的。
具体过程如下图所示:
Python实现:
我们的期望:
输入:数据库中数据和最小支持度
输出:频繁项集
例:
输入:数据,[[‘A’,’B’,’C’,’D’],[‘B’,’C’,’E’],[‘A’,’B’,’C’,’E’],[‘B’,’D’,’E’],[‘A’,’B’,’C’,’D’]];最小支持度:0.7
输出:[[‘B’], [‘C’], [‘B’, ‘C’]]
实现如下:
#coding=utf-8 # 全文utf-8编码import sysdef apriori(D, minSup): '''频繁项集用keys表示, key表示项集中的某一项, cutKeys表示经过剪枝步的某k项集。 C表示某k项集的每一项在事务数据库D中的支持计数 ''' C1 = {} for T in D: for I in T: if I in C1: C1[I] += 1 else: C1[I] = 1 print C1 _keys1 = C1.keys() keys1 = [] for i in _keys1: keys1.append([i]) n = len(D) cutKeys1 = [] for k in keys1[:]: if C1[k[0]]*1.0/n >= minSup: cutKeys1.append(k) cutKeys1.sort() keys = cutKeys1 all_keys = [] while keys != []: C = getC(D, keys) cutKeys = getCutKeys(keys, C, minSup, len(D)) for key in cutKeys: all_keys.append(key) keys = aproiri_gen(cutKeys) return all_keysdef getC(D, keys): '''对keys中的每一个key进行计数''' C = [] for key in keys: c = 0 for T in D: have = True for k in key: if k not in T: have = False if have: c += 1 C.append(c) return Cdef getCutKeys(keys, C, minSup, length): '''剪枝步''' for i, key in enumerate(keys): if float(C[i]) / length < minSup: keys.remove(key) return keysdef keyInT(key, T): '''判断项key是否在数据库中某一元组T中''' for k in key: if k not in T: # 只要有一个不匹配,就返回False return False return Truedef aproiri_gen(keys1): '''连接步''' keys2 = [] for k1 in keys1: for k2 in keys1: if k1 != k2: key = [] for k in k1: if k not in key: key.append(k) for k in k2: if k not in key: key.append(k) key.sort() if key not in keys2: keys2.append(key) return keys2D = [['A','B','C','D'],['B','C','E'],['A','B','C','E'],['B','D','E'],['A','B','C','D']]F = apriori(D, 0.7)print '\nfrequent itemset:\n', F
原文 http://www.jianshu.com/p/00103435ef89
阅读全文
0 0
- 频繁项集挖掘Apriori算法及其Python实现
- C++---Apriori算法实现,频繁模式数据挖掘,最大频繁项集,闭频繁项集
- 频繁项集挖掘算法Apriori FPGrowth
- 频繁项挖掘-Apriori算法
- 数据挖掘---频繁项集挖掘Apriori算法的C++实现
- 关联规则(association rule)挖掘与频繁项集挖掘算法Apriori Java实现
- 数据挖掘--频繁集测试--Apriori算法--java实现
- Apriori算法:频繁模式挖掘
- 频繁模式挖掘-Apriori算法
- 频繁模式挖掘apriori算法介绍及Java实现
- 频繁项集算法:Apriori算法的C++实现
- 海量数据挖掘MMDS week2: 频繁项集挖掘 Apriori算法的改进:非hash方法
- 数据挖掘Apriori算法python实现
- Spark下的FP-Growth和Apriori(频繁项集挖掘并行化算法)
- 挖掘布尔关联法则发现频繁项集的Apriori算法
- MAX-MINER 频繁模式挖掘 Apriori算法
- 频繁模式挖掘Apriori算法详解
- 频繁模式挖掘 Apriori 算法简介
- hdu6146 递推
- ACM集训日记-8月23日
- Linux重点知识整理
- 链表中环的入口结点
- Python之print语句
- 频繁项集挖掘Apriori算法及其Python实现
- 设置图图图
- 图结构练习——最小生成树(prim算法)
- Dubbo入门学习--SPI实现@SPI和@Adaptive
- 2017年多校联训9 部分题解
- LintCode_二叉查找树中搜索区间_简单的递归实现
- Android Studio
- MPAndroidChart的PieChart,渐变
- python基础2