您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 机器学习-FPGROWTH算法
机器学习-FP-GROWTH算法李家豪目录2Apriori算法和FP-GROWTH算法的比较FP-GROWTH算法原理FP-GROWTH代码实现(python)示例:从新闻网站点击流中挖掘新闻报道回忆Apriori算法3•项集:项的集合称为项集,即商品的组合。•k项集:k件商品的组合,不关心商品件数,仅商品的种类。•频繁项集:如果项集的相对支持度满足给定的最小支持度阈值,则该项集是频繁项集。•强关联规则:满足给定支持度和置信度阈值的关联规则•支持度:support(A-B)=P(AB)•置信度:confidence(A-B)=P(A|B)回忆Apriori算法4回忆Apriori算法5Apriori算法的挑战6挑战多次数据库扫描巨大数量的候补项集繁琐的支持度计算改善Apriori:基本想法减少扫描数据库的次数减少候选项集的数量简化候选项集的支持度计算FP-GROWTH算法优点•相比Apriori算法需要多次扫描数据库,FPGrowth只需要对数据库扫描2次。•第1次扫描事务数据库获得频繁1项集。•第2次扫描建立一颗FP-Tree树。7FP-GROWTH算法原理-实例1•要找总是一起购买的商品,比如[薯片,鸡蛋]就是一条频繁模式(规律)。8IDItems1牛奶,鸡蛋,面包,薯片2鸡蛋,爆米花,薯片,啤酒3牛奶,面包,啤酒4牛奶,鸡蛋,面包,爆米花,薯片,啤酒5鸡蛋,面包,薯片6鸡蛋,面包,啤酒7牛奶,面包,薯片8牛奶,鸡蛋,面包,黄油,薯片9牛奶,鸡蛋,黄油,薯片FP-GROWTH算法原理-实例1-统计频次•Step1:先扫描数据库,统计所有商品的出现次数(频数),然后按照频数递减排序,删除频数小于最小支持度的商品。设最小支持度数为:minsup=4统计频数:•牛奶6,鸡蛋7,面包7,薯片7,爆米花2,啤酒4,黄油2.降序排序:•薯片7,鸡蛋7,面包7,牛奶6,啤酒4(删除小于minsup的商品)9IDItems1牛奶,鸡蛋,面包,薯片2鸡蛋,爆米花,薯片,啤酒3牛奶,面包,啤酒4牛奶,鸡蛋,面包,爆米花,薯片,啤酒5鸡蛋,面包,薯片6鸡蛋,面包,啤酒7牛奶,面包,薯片8牛奶,鸡蛋,面包,黄油,薯片9牛奶,鸡蛋,黄油,薯片频繁1项集,记为F1FP-GROWTH算法原理-实例1-重新排序10IDItems1牛奶,鸡蛋,面包,薯片2鸡蛋,爆米花,薯片,啤酒3牛奶,面包,啤酒4牛奶,鸡蛋,面包,爆米花,薯片,啤酒5鸡蛋,面包,薯片6鸡蛋,面包,啤酒7牛奶,面包,薯片8牛奶,鸡蛋,面包,黄油,薯片9牛奶,鸡蛋,黄油,薯片IDItems1薯片,鸡蛋,面包,牛奶2薯片,鸡蛋,啤酒3面包,牛奶,啤酒4薯片,鸡蛋,面包,牛奶,啤酒5薯片,鸡蛋,面包6鸡蛋,面包,啤酒7薯片,面包,牛奶8薯片,鸡蛋,面包,牛奶9薯片,鸡蛋,牛奶Step2:对每一条数据记录,按照F1重新排序。FP-GROWTH算法原理-实例1-建立FP树11IDItems1薯片,鸡蛋,面包,牛奶2薯片,鸡蛋,啤酒3面包,牛奶,啤酒4薯片,鸡蛋,面包,牛奶,啤酒5薯片,鸡蛋,面包6鸡蛋,面包,啤酒7薯片,面包,牛奶8薯片,鸡蛋,面包,牛奶9薯片,鸡蛋,牛奶Step3:把第二步重新排序后的记录,插入到fp-tree中Step3.1:插入第一条(第一步有一个虚的根节点)FP-GROWTH算法原理-实例1-建立FP树12IDItems1薯片,鸡蛋,面包,牛奶2薯片,鸡蛋,啤酒3面包,牛奶,啤酒4薯片,鸡蛋,面包,牛奶,啤酒5薯片,鸡蛋,面包6鸡蛋,面包,啤酒7薯片,面包,牛奶8薯片,鸡蛋,面包,牛奶9薯片,鸡蛋,牛奶Step3.2:插入第二条。根结点不管,然后插入薯片,在step3.1的基础上+1,则记为2;同理鸡蛋记为2;啤酒在step3.1的树上是没有的,那么就开一个分支。FP-GROWTH算法原理-实例1-建立FP树13IDItems1薯片,鸡蛋,面包,牛奶2薯片,鸡蛋,啤酒3面包,牛奶,啤酒4薯片,鸡蛋,面包,牛奶,啤酒5薯片,鸡蛋,面包6鸡蛋,面包,啤酒7薯片,面包,牛奶8薯片,鸡蛋,面包,牛奶9薯片,鸡蛋,牛奶Step3.3:插入第三条FP-GROWTH算法原理-实例1-建立FP树14IDItems1薯片,鸡蛋,面包,牛奶2薯片,鸡蛋,啤酒3面包,牛奶,啤酒4薯片,鸡蛋,面包,牛奶,啤酒5薯片,鸡蛋,面包6鸡蛋,面包,啤酒7薯片,面包,牛奶8薯片,鸡蛋,面包,牛奶9薯片,鸡蛋,牛奶同理,剩余记录依次插入fp-tree中。FP-GROWTH算法原理-实例1-建立FP树15图中左边的一列叫做头指针表,树中相同名称的节点要链接起来,链表的第一个元素就是头指针表里的元素。虚线连接起来的表示同一个商品,各个连接的数字加起来就是该商品出现的总次数。FP-GROWTH算法原理-实例1-挖掘频繁项集•Step4:从FP-Tree中找出频繁项集。遍历表头项中的每一项(以“牛奶:6”为例),从FP-Tree中找到所有的“牛奶”结点,向上遍历它的祖先结点,得到4条路径,如表所示。16FP-GROWTH算法原理-实例1-挖掘频繁项集•Step4:从FP-Tree中找出频繁项集。对于每一条路径上的节点,其count都设置为牛奶的count(路径中最末尾的商品数)17FP-GROWTH算法原理-实例1-挖掘频繁项集•Step4:从FP-Tree中找出频繁项集。因为每一项末尾都是牛奶,可以把牛奶去掉,得到条件模式基,此时的后缀模式是:牛奶。18FP-GROWTH算法原理-实例2•把例子简化一下,请看以下实例219TidItems1I1,I2,I52I2,I43I2,I34I1,I2,I45I1,I36I2,I37I1,I38I1,I2,I3,I59I1,I2,I3FP-GROWTH算法原理-实例2-统计频次•先扫描数据库,统计所有商品的出现次数(频数)•定义min_sup=2,按照频数递减排序,删除频数小于最小支持度的商品。重新排列得到频繁1-项目集F20I1I2I3I4I567622I2I1I3I4I576622FP-GROWTH算法原理-实例2-重新排序21I27I16I36I42I52TidItems1I2,I1,I52I2,I43I2,I34I2,I1,I45I1,I36I2,I37I1,I38I2,I1,I3,I59I2,I1,I3FP-GROWTH算法原理-实例2-创建根结点和频繁项目表22Item-nameNode-headI2NullI1NullI3NullI4NullI5NullNullFP-GROWTH算法原理-实例2-加入第一个事务(I2,I1,I5)23FP-GROWTH算法原理-实例2-加入第二个事务(I2,I4)24FP-GROWTH算法原理-实例2-加入第三个事务(I2,I3)25FP-GROWTH算法原理-实例2-加入第四个事务(I2,I1,I4)26FP-GROWTH算法原理-实例2-加入第五个事务(I1,I3)27FP-GROWTH算法原理-实例2-加入第六个事务(I2,I3)28FP-GROWTH算法原理-实例2-加入第七个事务(I1,I3)29FP-GROWTH算法原理-实例2-加入第八个事务(I2,I1,I3,I5)30FP-GROWTH算法原理-实例2-加入第九个事务(I2,I1,I3)31FP-GROWTH算法原理-实例2-挖掘频繁项集•首先考虑I5,得到条件模式基:(I2,I1:1)、I2,I1,I3:1•构造条件FP-Tree32得到I5频繁项集:{{I2,I5},{I1,I5},{I2,I1,I5}}FP-GROWTH算法原理-实例2-挖掘频繁项集•接着考虑I4,得到条件模式基:(I2,I1:1)、I2:1•构造条件FP-Tree33得到I4频繁项集:{{I2,I4}}FP-GROWTH算法原理-实例2-挖掘频繁项集•然后考虑I3,得到条件模式基:(I2,I1:2)、I2:2、I1:2•构造条件FP-Tree34由于此树不是单分支路径,因此需要递归挖掘I3FP-GROWTH算法原理-实例2-挖掘频繁项集•递归考虑I3,此时得到I1条件模式基(I2:2),即I1,I3的条件模式基为(I2:2)•构造条件FP-Tree35得到I3的频繁项目集{{I2,I3},{I1,I3},{I2,I1,I3}}FP-GROWTH算法原理-实例2-挖掘频繁项集•最后考虑I1,得到条件模式基:(I2:4)•构造条件FP-Tree36得到I1的频繁项目集:{I2,I1}FP-GROWTH算法实现-数据处理37项集e,m,q,s,t,y,x,zx,s,r,o,ns,u,t,w,v,y,x,zq,p,r,t,y,x,zh,r,z,p,jz格式化处理代码实现-FP树数据结构38代码实现-构造FP树步骤39代码实现-构造FP树40代码实现-构造FP树41代码实现-构造FP树(updateTree函数)42代码实现-构造FP树(updateHeader函数)43代码实现-构造FP树(验证)44代码实现-挖掘频繁项集步骤•从构建好的FP树中抽取频繁项集的步骤如下:(1)从FP树中获取条件模式基;(2)利用条件模式基,构建一个条件FP树;(3)迭代重复(1)(2),直到树包含一个元素项为止。45条件模式基定义•条件模式基是以所查找元素项为结尾的路径集合。每一条路径其实都是一条前缀路径。简而言之,一条前缀路径就是介于所查找元素项与树根节点之间的所有内容。•每一个频繁项的所有前缀路径(条件模式基):46代码实现-抽取条件模式基47eg:t的第1条前缀路径prefixPath=t,s,y,x,z;代码实现-抽取条件模式基48代码实现-抽取条件模式基(验证)49代码实现-创建条件FP树50代码实现-创建条件FP树51代码实现-运行52示例:从新闻网站点击流中挖掘新闻报道-数据格式53示例:从新闻网站点击流中挖掘新闻报道-代码•在源数据集合中,包含将近100w条记录,该文件中的每一行代表某个用户浏览过的新闻报道。一些用户只看过一篇报道,而有些用户看过2498篇报道,用户和报道被编码成整数。54示例:从新闻网站点击流中挖掘新闻报道-结果55谢谢!56
本文标题:机器学习-FPGROWTH算法
链接地址:https://www.777doc.com/doc-3186676 .html