在开始之前首先要说明下构造FP-Tree树的过程及Fp-Tree树涉及的相关概念;
@构造FP-Tree树的过程如下:
1.按Apriori算法,扫描数据库一次生成1-频繁项目集,并按频度降序排列,放入L列表中;
2.创建根节点,标志为Null,扫描数据库一次,当得到数据库的一个项目(元祖)时,就把其他元素按L表中的次序排列,然后通过递归程序实现FP-Tree树的增长;
@关于置信度(Confidence)和支持度(Support):
严格地说Apriori和FP-Tree都是寻找频繁项集的算法,频繁项集就是所谓的“支持度”比较高的项集;
设事务数据库为:
AEFG
AFG
ABEFG
EFG
则{A,F,G}的支持度数为3,支持度为3/4。
{F,G}的支持度数为4,支持度为4/4。
{A}的支持度数为3,支持度为3/4。
{F,G}=>{A}的置信度为:{A,F,G}的支持度数 除以 {F,G}的支持度数,即3/4
{A}=>{F,G}的置信度为:{A,F,G}的支持度数 除以 {A}的支持度数,即3/3
强关联规则挖掘是在满足一定支持度的情况下寻找置信度达到阈值的所有模式。
@下面开始为Fp-Tree算法详解及Fp-Tree树的构造详细过程:
事务数据库如下:
1.牛奶,鸡蛋,面包,薯片
2.鸡蛋,爆米花,薯片,啤酒
3.鸡蛋,面包,薯片
4.牛奶,鸡蛋,面包,爆米花,薯片,啤酒
5.牛奶,面包,啤酒
6.鸡蛋,面包,啤酒
7.牛奶,面包,薯片
8.牛奶,鸡蛋,面包,黄油,薯片
9.牛奶,鸡蛋,黄油,薯片
我们的目的是要找出哪些商品总是相伴出现的,比如人们买薯片的时候通常也会买鸡蛋,则[薯片,鸡蛋]就是一条频繁模式(frequent pattern)。
FP-Tree算法第一步:扫描事务数据库,每项商品按频数递减排序,并删除频数小于最小支持度MinSup的商品。(第一次扫描数据库)
以下右图结果为频繁1项集,记为F1。
(这里我们令MinSup=3,Minconfidence = 50%)
候选一项集 频繁一项集
第二步:对每条购买记录按照F1重新排序;
1.薯片,鸡蛋,面包,牛奶
2.薯片,鸡蛋,啤酒
3.薯片,鸡蛋,面包
4.薯片,鸡蛋,面包,牛奶,啤酒
5.面包,牛奶,啤酒
6.鸡蛋,面包,啤酒
7.薯片,面包,牛奶
8.薯片,鸡蛋,面包,牛奶
9.薯片,鸡蛋,牛奶
第三步:将第二步得到的记录插入FP-Tree中;
插入第一条记录于FP-Tree中:
插入第二条记录与FP-Tree中:
以此类推,直到将所有记录完全置入FP-Tree中为止,最终生成的FP-Tree如下:
第四步:通过生成的FP-Tree,我们可以找出候选二项集及频繁二项集;
候选二项集频繁二项集
以此类推,我们还可以得到频繁三项集,频繁四项集等;
PS:经典的关联规则数据挖掘算法广泛应用于各种领域,通过对数据的关联性进行了分析和挖掘,挖掘出的这些信息在决策制定过程中具有重要的参考价值,如商业领域中,较为典型的例子可能就是“啤酒与纸尿裤”的故事了。
鄙人才疏学浅,代码还没写出来,这篇博客算是总结了 -.-||
参考:http://blog.csdn.net/ywjun0919/article/details/8723784 【FP-Tree算法的实现】