模式识别中的Apriori算法和FPGrowth算法

pattern discovery算法

模式识别中的一些基本概念

  • 模式:对于一个集合项,某些特定的子序列或者结构一般一块儿出如今数据集中
  • absolute support :某一项出现的频率[数量]
  • relative support: 某一项出现的频率
  • frequent item:该项的support值大于最小support阈值
  • association rules: X->Y(s,c) 在有X的前提下,有Y的几率是多少 s(support):support( x U y )[x和y都出现的数量];
  • confidence:既包含x又包含y的几率,简记为c = sup(x U y) / sup(x)
  • close pattern:子集x是频繁的。而且不存在一个x的父集y,是的y和x有同样的support值。它不会丢失频繁子集信息
  • max pattern: 子集x是频繁的。而且不存在一个x的父频繁子集。会丢失频繁子集的support值

Apriori算法基本思想

若是一个集合是频繁的,那么在同一个最小sup值下,它的子集也是频繁的。算法的核心思想是:首先找到全部的1项表明集C1,根据sup过滤获得频繁集合F1,从F1中获得表明集C2,C2的本身若是有不在F1中的,就删掉【这个过程称为剪枝】,而后遍历数据集,当C2中的数据在原始数据集中是频繁的时候,获得频繁集F2,依次往复。数据库

Aprior算法面临的问题

  1. 看起来没产生一个频繁集须要访问一遍数据库,改进的策略是:分区。
  2. 从k项的频繁集,到k+!项的表明集会包含不少元素,因此最好能减小表明集的数量,有效策略是 hash(等)。

分区策略

对于一个很大的数据库来讲,分区以后,若是某一项是频繁的,意味着至少存在一个分区,它也是频繁的,因此,第一次扫描数据库,先把当前分区的数据所有收入内存,而后计算出当前分区的全部频繁集,而后把全部的频繁集统一收做全局表明。再过滤出全局频繁的,整个过程只有两次扫描数据库【有点小把戏,把数据缩小到内存中能放下,在内存中算】ide

  • ECLAT(Equivalence Class Transformation):通常的数据库是根据项ID和项值来存储的,这里的主要思想是把惟一的项值提出来,对应列放在数据库中的项ID列表。
    此时,当前项的频率就是ID列表的大小,若是要看两个项的频率就是求IDlist的交集。
    这种存储具有以下的特征:若是idlist如出一辙,表明这两项确定是一块儿出现;若是x的ID列表是Y的ID列表的子集,那么拥有X项的记录一定拥有Y

hash较少表明集数量

对全部k集频繁项作hash计算,hash表中存储计算结果为同一个hash值的个数【能够在具体的分区作】,若是这个数值小于support值,那么当前hash桶中的全部项都不是频繁的,就不会当作表明集频繁模式挖掘-DHP算法详解 | I am Busyui

大体思路是:同一个hash值的确定会进同一个地方,若是一项出现多个,那么他们一定是进同一个hash桶,也就是说这个的hash桶的个数会不少,若是个数少,说明这个hash桶中的数据都不是频繁的orm

FPGrowth算法

FP-tree(frequent pattern tree)定义:cdn

  1. 它包含了一个root,被标记成null,root有每一项做为前缀的子项,同时有一张表记录了频繁项的头;
  2. 项前缀的子树包含3个部分:该项的名字,数量和节点连接。
  3. 每一个频繁项的头表有两个字段,项的名字以及节点连接的头

FP-tree挖掘的步骤:
通过FP定义构建好FP-tree以后,这时它的跟节点是root,能够称做全局树,而后根据header table给定的顺序,从末尾的项,选择一个元素P,以它为条件,构建FP-tree,称做P条件先的FP-tree,构建策略是从P开始往上寻找父节点,count值则是以P为基础,构建结果后,一直到最终只剩下一个元素,挖掘结束

相关文章
相关标签/搜索