一:背景

  http://www.cnblogs.com/aijianiula/p/5397857.html

  上节中,总结了频繁项集挖掘的最基本算法:Apriori算法。这篇文章写下它的改进算法FGrowth算法,记得这个算法是香港一位教授提出来的,其思想非常值得借鉴和思考。

二:FGrowth

  FPGrowth算法采用频繁增长模式,通过建立增长树来产生优化Apriori算法,减少数据库的扫描次数和在必要时候剪枝来减少枚举程度,同样以上面的例子来说明FPGrowth算法优化过程。这里引用《数据挖掘概念和技术》这本书中的图来进行说明。

  这个算法主要分为两个步骤:

  1.FP树的构造,2.FP树中频繁项集的挖掘

  1.FP树的构造

  FP树的构造过程其实也非常简单,首先建立一个只有null节点的树。然后在数据库中拿出第一个事务,按照事务中的1项集支持度进行排序,从大到小。

交易ID

商品ID列表

 

交易ID

商品ID列表

T100

I1,I2,I5

 

T600

I2,I3

T200

I2,I4

 

T700

I1,I3

T300

I2,I3

 

T800

I1,I2,I3,I5

T400

I1,I2,I4

 

T900

I1,I2,I3

T500

I1,I3

     

如上图的事务表中,取出第一条记录,T100事务{I1,I2,I3},在上节中我们统计过1项集的支持度了,如下图:

项集

支持度计数

{I1}

6

{I2}

7

{I3}

6

{I4}

2

{I5}

2

所以它的T100事务的支持度排序之后为:I2,I1,I5,然后开始创建分支<I2,1>,<I1,1>,<I5,1>。I2作为分支连接到根节点null中,I1链接到I2,I5链接到I1.

第2个事务T200按1项集排序分别为I2,I4,为T200创建分支,I2链接到根,I4链接到I2。因为分支中与T100共享了前缀I2,所以I2的计数加1。因此创建一个新节点<I4,1>链接到<I2,2>节点上。

第3个事务T300 {I2,I3}排序后为I2,I3。为此事务创建分支,I2链接到根节点,I3链接到I2,I2的计数加1,因此<I3,1>链接到<I2,3>

第4个事务T400 {I1,I2,I4}排序后为I2,I1,I4。为此事物创建分支,I2链接到根节点,I1链接到I2,I4链接到I1,I2的计数加1,I1的计数加1,创建节点<I4,1>链接到<I1,2>

......

在FP树的左边创建了一个数组,是为了方便树的遍历,创建一个项头表,每项通过一个节点链指向它在树中的位置。

  2.FP树中频繁项集的挖掘

  FP树的挖掘过程是从事务的最后一个开始的,如上图中的fp树,I5是最后一项,那么沿着树的路径,到I5的路径由{I2,I1,I5:1},{I2,I1,I3,I5:1}。那么以I5作为后缀,它的前缀即为{I2,I1:1},{I2,I1,I3:1},也称为I5的条件模式基。使用这些条件模式基来构建I5的fp树,它只包含单个路径{I2:2,I1:2};不包含I3的原因是它的支持度为1,小于我们指定的最小支持度2。那么它的单个路径产生的频繁模式所有组合为:{I2,I5:2},{I1,I5:2},{I2,I1,I5:2}

  对I4,它的两个前缀形成条件模式基{I2,I1:1},{I2:1},产生一个单节点的条件fp树<I2:2>,所以它导出的频繁模式为{I2,I4:2}

  对I3,它的条件模式基伟{I2,I1:2}{I2:2}{I1:2}它的条件fp树有两个分支<I2:4,I1:2>和{I1:2}产生的模式集为{I2,I3:4}{I1,I3:4} {I2,I1,I3:2}

  对于I1,它的条件模式基伟{I2:4},只有一个,所以产生的频繁模式为{I2,I1:4}

条件模式基

条件FP树

产生的频繁模式

I5

{I2,I1:1},{I2,I1,I3:1}

<I2:2,I1:2>

{I2,I5:2},{I1,I5:2},{I2,I1,I5:2}

I4

{I2,I1:1},{I2,1}

<I2:2>

{I2,I4:2}

I3

{I2,I1:2},{I2:2},{I1:2}

<I2:4,I1:2>,<I1:2>

{I2,I3:4},{I1,I3:4},{I2,I1,I3:2}

I1

{I2:4}

<I2:4>

{I2,I1:4}

最新文章

  1. Puppet权威指南
  2. MySQL自动化安装(双主多从读写分离)
  3. 矩阵乘法 and BIOS loads MBR into 0x7C00?
  4. PC110305/UVA10188
  5. ASP.NET Core Authorization
  6. Hadoop-2.4.0安装和wordcount执行验证
  7. Lua读取CSV文件到table中
  8. 【spring源码分析】准备工作
  9. Spring学习-01
  10. Django 信号、中间件、i18n 专题
  11. ztree插件异步加载 使用RESTEasy报错 Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.
  12. Templates&lt;2&gt;
  13. IDEA创建第一个项目详细过程
  14. 有关centos7 图形化root用户登录
  15. [luogu4462][异或序列]
  16. php ajax返回无故刷新页面
  17. 说出ArrayList,Vector, LinkedList的存储性能和特性
  18. oracle 之 创,增,删,改操作
  19. 构建NetCore应用框架之实战篇系列
  20. Java中List效率的比较

热门文章

  1. Android的Activity之间传对象的方法
  2. 广播接收者 BroadcastReceiver
  3. Spring Boot配置文件大全
  4. 数据库_6_SQL基本操作——库操作
  5. 新版raspbian系统的固定IP配置和启用root账户的ssh登录功能的方法
  6. urlrewrite地址重写实例
  7. java在线聊天项目0.9版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能之客户端接收
  8. Cocos2d-X研究之3.0 场景切换特效汇总
  9. javascipt的forEach
  10. MySQL中数组的存储