频繁模式挖掘——概述
频繁模式挖掘(Frequent Pattern Mining)
- 基本概念
a. 频繁模式(frequent pattern)是频繁地出现在数据集中的模式(如项集、子序列或子结构)。
例如:
i. 频繁同时出现在交易数据集中的商品(如牛奶和面包)的集合是频繁项集。
ii. 一个序列如首先购买PC、然后是数码相机、再后是内存卡,如果它频繁地出现再购物历史数据中,则称它为一个频繁序列模式(FTM)。
iii. 一个子结构可能涉及不同的结构形式,如子图、子树或子格,它可能与项集或子序列结合在一起。如果一个子结构频繁地出现,则称它为频繁结构模式(FSM)。
b. 项(item)、项集(itemset)、频繁项集(frequent itemset)
项(item)表示一种研究对象(例如购物篮实例里的商品)。设I={I_1,I_2,…,I_m}是项的集合,称为项集(itemset)。设任务相关的数据D是数据库事务的集合,其中每个事务T是一个非空项集,满足TϵI。每一个事务都有一个标识符,称为TID。
c. 关联规则、支持度(support)、置信度(confidence)
关联规则是形如A⇒B的蕴含式,其中A⊂I,B⊂I,A≠∅,B≠∅,并且A∩B≠∅。规则A⇒B在事务集D中具有支持度s,其中s是D中事务包含A∪B(集合A和B的并)的百分比。规则A⇒B在事务集D中具有置信度c,其中c是D中在包含A事务的前提下包含B事务的百分比。同时满足最小支持度阈值(min_sup)和最小置信度阈值(min_conf)的规则称为强规则。
support(A⇒B)=P(A∪B)
confidence(A⇒B)=P(B│A)=(support(A∪B))/(support(A))=(support_count(A∪B))/(support_count(A))
如果项集I的支持度s满足预定义的最小支持度阈值,则I是频繁项集。频繁k项集的集合通常记为L_k。
d. 挖掘过程
上式表明A⇒B的置信度容易从A和A∪B的支持度计数推出。挖掘关联规则的问题可以归结为挖掘频繁项集。
一般关联规则的挖掘可以分为两步:
(1)找出所有的频繁项集。根据定义,这些项集的支持度至少与预定义的最小支持度阈值一样。
(2)由频繁项集产生强关联规则。根据定义,这些规则必须满足最小支持度和最小置信度。
*一个例子。下图为5次交易的数据,每行代表一个事务,每个事务包好几个项。数据内隐含着内在关联。
事务:由事务号和项集组成。事务是一次购买行为。
项:最小处理单元,即购买的物品。
项集:由一个或多个项组成。
支持度计数:包含某个项集的事务数。
关联规则:A和B都是项集,A⇒B(s,c)。这里假设A={Milk,Diaper},B={Beer}。
支持度:包含某个项集的事务数的比例
s=(|Milk,Diaper,Beer|)/(|T|)=2/5=0.4
置信度:在所有包含X项集的事务中包含Y项集事务的比例
s=(|Milk,Diaper,Beer|)/(|Milk,Diaper|)=2/3=0.67
关联规则评估:
{Milk,Diaper}⇒{Beer}(0.4,0.67)
支持度不小于指定阈值,并且置信度不小于指定阈值,则为强关联规则。
2. 相关算法
2.1 Apriori算法(经典的频繁项集挖掘算法)
a. 算法核心思想
(1)如果一个集合是频繁项集,则它的所有子集都是频繁项集;
(2)如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。
b. 算法流程
i. 找到频繁的一维项集L1;
ii. 从频繁的L_k维项集生成k+1维项集C_(k+1);(下面详细说明)
iii. 找到C_(k+1)中的频繁项集L_(k+1);
iv. k=k+1,循环执行i和ii,直到k+1=n,n为最大项集;或产生的项集为空,即不存在更大的频繁项集;
v. 输出各维度的频繁项集。
*说明如何从L_k生成 C_(k+1)的方法,k>1
i. 假设在L_k中的所有items都是排序好的(例如alphabetical)。
ii. 连接(joining)。将L_k与自身连接(L_k⋈L_k)从而产生C_(k+1),具体方法是:设l_1和l_2是L_k中的项集,l_1 [j]表示l_1的第j项。则称l_1和l_2是可连接的,如果〖(l〗_1 [1]=l_2 [1])∧〖(l〗_1 [2]=l_2 [2])∧…∧〖(l〗_1 [k-1]=l_2 [k-1])∧〖(l〗_1 [k]<l_2 [k])。连接的结果是生成一个k+1项集,〖{l〗1 [1],l_1 [2],…,l_1 [k],l_2 [k]}。
iii. 剪枝(pruning)。删除生成的C(k+1)中的某个项集,如果这个项集满足,它存在一个k维子项集,且这个子项集不在L_k中。(为了减小时间复杂度,通过基本思想的第二点可以直接删除某些非频繁项集)。
*一个例子。下表表示一个事务数据库D,每一行都是一个事务T,包含TID和项集。目标是找出满足min_sup=2的所有维度的频繁项集。
最终产生了三个维度的频繁项集,L_1,L_2,L_3。我们可以根据频繁项集来得到相应的关联规则。
2.2 提高Apriori算法效率
基于散列的技术/事务压缩/划分/抽样/动态项集计数等。
2.3 Apriori算法存在的问题
主要还是开销问题。
(1)需要产生大量候选项集;
(2)需要重复扫描整个数据库,通过模式匹配检查一个很大的候选集合。
已有的解决方法:
FP-growth,将代表频繁项集的数据库压缩到一棵频繁模式树(FP树)上。通过把事务映射到FP树上的一条路径上来构造,由于不同事务可能会有若干相同的项,因此它们的路径可能部分重叠。路径相互重叠越多,使用FP树结构获得的压缩效果越好。
FP增长采用分治策略将一个子问题分解为较小的子问题,从而发现以某个特定后缀结尾的所有频繁项集。
2.4垂直数据格式挖掘
Apriori和FP-growth算法都是以{TID: itemset}的事务集中挖掘频繁模式。这种格式是水平数据格式。也可以通过{item:TID_set}这种数据格式来挖掘频繁模式,这种称为垂直数据格式。
3. 模式评估方法
- 支持度-置信度框架。可能存在的问题:有可能一个强关联规则并不能很好的表示A和B之间的关系(即A和B有可能是负相关的)。
- 相关性分析。A⇒B[support,confidence,correlation]。
a. 提升度(lift)。
lift(A,B)=(P(A∪B))/(P(A)P(B))
值为1代表A和B是独立的;
值小于1代表A和B负相关,意味着一个的出现可能导致另一个不出现。
值大于1代表A和B正相关,意味着一个的出现都蕴含着另一个的出现。
b. χ^2相关性度量
χ2=∑_(i=1)c▒∑_(j=1)r▒〖(o_ij-e_ij)〗2/e_ij
上述两种指标不是零不变的(度量值不受零事务的影响,零事务是指不包含任何考察项集的事务)。
c. 全置信度
all_conf(A,B)=(sup(A⋃B))/(max{sup(A),sup(B)})=min{P(A|B),P(B|A)}
d. 最大置信度
max_conf(A,B)=max{P(A|B),P(B|A)}
e. Kulc度量
Kulc(A,B)=1/2(P(A│B)+P(B|A))
f. 不平衡比(Imbanlance Ratio, IR),用来评估规则蕴含式中两个项集A和B的不平衡程度。
IR(A,B)=(|sup(A)-sup(B)|)/(sup(A)+sup(B)-sup(A⋃B))
结论,采用Kulc度量和不平衡比配合使用最好。
4. 频繁子图挖掘(Frequent Sub-graph Mining - FSM)
Graph mining研究情况:
(1)基本概念
• Discovery of graph structures that occur a significant number of times across a set of graphs
- Support is some integer or frequency 分为单图挖掘&多图挖掘
- Frequent graphs occur more than support number of times.
• Ex.: Common occurrences of hydroxide-ion
• Other instances:
- Finding common biological pathways among species.
- Recurring patterns of humans interaction during an epidemic.
- Highlighting similar data to reveal data set as a whole.
(2)主要难点
a. 图重构。
b. 子图重构。
这些问题都是NP-Complete。
(3)一些方法
a. 传统frequent pattern mining方法
可以说是Apriori算法的变形。
General Process:
candidate generation: which patterns will be considered? For FSM,
candidate pruning: if a candidate is not a viable frequent pattern, can we exploit the pattern to prevent unnecessary work?
*subgraphs and subsets exponentiate as size increases!
support counting: how many of a given pattern exist?
DFS or BFS
Joins smaller frequent sets into larger ones.
Checks the frequency of larger sets.
b. gSpan
- complete frequent subgraph mining
- Apriori扩展,使用DFS和candidate pruning来提升性能。
编码方式
c. SUBDUE
- approximate frequent subgraph mining
- 使用图压缩的方法来决定频繁模式。
d. SLEUTH - complete frequent subgraph mining
- built specifically for trees
(4)算法评价
• Apriori-based Approach (Traditional):
- Strength: Simple to implement
- Weakness: Inefficient
• gSpan (and other Pattern Growth algorithms):
Strength: More efficient than Apriori
Weakness: Still too slow on large data sets
• SUBDUE
Strength: Runs very quickly
Weakness: Uses a heuristic(启发式), so it may miss some frequent subgraphs
• SLEUTH: - Strength: Mines embedded trees, not just induced, much quicker than more general FSM
- Weakness: Only works on trees… not all graphs
Reference
[1]. Yan, X. and Han, J.W. 2002. gSpan: Graph-based Substructure pattern mining, In Proceedings of International Conference on Data Mining, 721–724.
[2]. Yan, X. and Han, J. 2003. CloseGraph: Mining Closed Frequent Graph Patterns, In Proceedings of the 9th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 286–295, Washington D.C., USA.
[3]. C Jiang, F Coenen, M Zito - Knowledge Engineering, A Survey of Frequent Subgraph Mining Algorithms, 2013 - livrepository.liverpool.ac.uk, The Knowledge Engineering Review, Vol. 00:0, 1–31
频繁模式挖掘——概述相关推荐
- 【数据挖掘】频繁模式挖掘及Python实现
1.理论背景 在美国,著名的沃尔玛超市发现啤酒与尿布总是共同出现在购物车中,于是沃尔玛超市经过分析发现许多美国年轻的父亲下班之后经常要去购买婴儿的尿布,而在购买尿布的同时,他们往往会顺手购买一些啤酒: ...
- mahout探索之旅---频繁模式挖掘算法与理解
频繁模式挖掘 (先声明一下,文章内容可能你在网上也能找到,但是我参考了几篇文章的优势,使得算法更容易理解) Apriori算法 Apriori算法是一个经典的数据挖掘算法,Apriori的单词的意思是 ...
- 数据挖掘-关联分析频繁模式挖掘Apriori、FP-Growth及Eclat算法的JAVA及C++实现
(update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见 newsgroup18828文本分类器.文本聚类器.关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQ ) 一. ...
- 频繁模式挖掘Frequent Pattern Mining
频繁模式挖掘(Frequent Pattern Mining): 频繁项集挖掘是通常是大规模数据分析的第一步,多年以来它都是数据挖掘领域的活跃研究主题.建议用户参考维基百科的association r ...
- 数据挖掘(一)频繁模式挖掘算法的实现和对比
注:参考多篇CSDN文章所得 一.实验内容 巩固频繁模式挖掘的基本算法原理及特点,设计程序,基于不同特征的数据集比较不同方法的优缺点,并基于算法原理和特点分析造成这种现象的原因. 二.算法原理 1 A ...
- apriori java_频繁模式挖掘apriori算法介绍及Java实现
频繁模式是频繁地出如今数据集中的模式(如项集.子序列或者子结构).比如.频繁地同一时候出如今交易数据集中的商品(如牛奶和面包)的集合是频繁项集. 一些基本概念 支持度:support(A=>B) ...
- 频繁模式挖掘 Apriori
原文地址:http://blog.sina.com.cn/s/blog_6a17628d0100v83b.html 1. 挖掘关联规则 1.1 什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵 ...
- 机器学习1:关联分析及频繁模式挖掘Association rule mining(基于R language)
关联分析是一种无监督的机器学习方法,常用于知识发现而非预测.本文从以下几个方面进行叙述: 频繁项 Frequent Patterns 关联挖掘方法 Association Mining Metho ...
- 【数据挖掘笔记六】挖掘频繁模式、关联和相关性:基本概念和方法
6.挖掘频繁模式.关联和相关性:基本概念和方法 频繁模式(frequent pattern)是频繁地出现在数据集中的模式. 6.1 基本概念 频繁模式挖掘搜索给定数据集中反复出现的联系,旨在发现大型事 ...
最新文章
- 互联网圈都是什么人年薪百万?这份报告有真相
- Java面试题详解三:比较器
- Vue-devtools 安装浏览器调试
- 打印合同_批量打印合同用印申请单
- delphi中採用bpl共享模塊的幾點釋疑
- vue新版本和旧版本关闭eslint总结
- c语言每次堆的变化是1k,DSPXC语言+程序烧写讲述.ppt
- tomcat高版本之URL解析异常解决
- drupal主题开发_Drupal开发人员,关于如何使您的网站更易于访问
- jacob 详解 语音_JAVA 实现Jacob语音播报
- Atitit 价值观与理念总结 Diy自力更生尽可能 提高独立性 减少依赖 大而全优先于小而美 适度分权防止集权导致大决策失误 方式多种多样 综合是王道 简单快速优先 努力实现人们喜闻乐见的服务 信
- 报错 mysql 1194
- 基于LSTM神经网络的负荷预测(Python代码实现)
- JS在H5下实现本地历史搜索记录
- 第五天学习--存储结构与磁盘划分
- 阿里云服务器ECS搭建后台(Windows Server 2012R2)
- UE在.CS文件中打印Log(日志)
- struct2破绽及升级
- HTML(2) 实现一个简单的注册页面
- java发展的前景到底如何?