FPG是FP-growth算法的简称,推荐算法=》关联算法中最有名的算法之一,是Apriori算法的性能优化版。

参考了一些示例,自行再实现,具体算法如下。

步骤归纳为:
1、第一次遍历获取HeaderTable,包括去重、计频繁数、依据最小支持度去项、重排序(频繁数倒序);
2、第二次遍历更新原列表,包括依据headerTable去除小于最小支持度的项、重排序
3、建FP Tree,包括创建新节点、相似元素项节点合并

调用入口 (test04.py):

#coding:utf-8
import test03
oneDimList = []
def loadSimpDat():simpDat = [['r', 'z', 'h', 'j', 'p'],['z', 'y', 'x', 'w', 'v', 'u', 't', 's'],['z'],['r', 'x', 'n', 'o', 's'],['y', 'r', 'x', 'z', 'q', 't', 'p'],['y', 'z', 'x', 'e', 'q', 's', 't', 'm']]return simpDat# 数据准备
simpDat = loadSimpDat()
for list in simpDat:oneDimList += list
# 建header table
headerTable = test03.HeaderTable().create(oneDimList, 3)
# 建FP tree
buildTree = test03.BuildTree()
updDat = buildTree.refactor(simpDat, headerTable)
fpTree = buildTree.update(updDat)
# 打印结果
for fpTreeItem in fpTree:print 'parent:' + fpTreeItem.parent + ', name:' + fpTreeItem.name + \', num:' + str(fpTreeItem.numOccur)

核心实现 (test03.py):

#coding:utf-8
class HeaderTable:def __init__(self):passdef create(self, dat, minsup):headerTable = {}# 去重setDat = set(dat)# 计频繁数for key in setDat:headerTable[key] = dat.count(key)# 依据最小支持度去项for k,v in headerTable.items():if v < minsup:del(headerTable[k])# 重排序headerTable = sorted(headerTable.items(),key=lambda i:i[1],reverse=True)print headerTablereturn headerTableclass FPTreeItem:def __init__(self, key, name, numOccur, parent):self.key = key              # keyself.name = name            # 项名self.numOccur = numOccur    # 频繁值self.parent = parent        # 父节点class BuildTree:# inDat: (list) [[],[]]def refactor(self, inDat, headerTable):lineCounter = 0datLine =[]dat = []# 依据headerTable去除小于最小支持度的项、重排序for list in inDat:lineCounter += 1for i in headerTable:if i[0] in list:datLine.append(i[0])dat.append(datLine)datLine = []return dat# updDat: (list) [[],[]]def update(self, updDat):fpTree = []for list in updDat:parent = ''keyLink = ''for item in list:parent = keyLinkkeyLink += itemfor fpTreeItem in fpTree:if keyLink == fpTreeItem.key:# 相似元素项节点合并fpTreeItem.numOccur += 1break# 没有这个元素项时创建一个新节点else:fpTreeItem = FPTreeItem(keyLink, item, 1, parent)fpTree.append(fpTreeItem)return fpTree

参考:

http://www.cnblogs.com/zhangchaoyang/articles/2198946.html
http://www.cnblogs.com/qwertWZ/p/4510857.html

[Python]FPG(FP-growth)算法核心实现相关推荐

  1. Frequent Pattern 挖掘之二(FP Growth算法)(转)

    FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达到这样的效果,它采用了一种简洁的数据结 ...

  2. MapReduce框架下的FP Growth算法概述

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebi.html 前面的博客分析了关联分析中非常重要的一个算法-FP Growth.该算法根据数据库在内 ...

  3. FP Growth算法

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebg.html FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法 ...

  4. MapReduce框架下的FP Growth算法详解

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebk.html Sharding 这一步没什么好讲的,将数据库分成连续的大小相等的几个块,放置在不同的 ...

  5. FP Growth算法详解

    看了n多资料,就这篇说的比较详细,适合初学者 FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对 ...

  6. python序列模式的关联算法_关联算法

    以下内容来自刘建平Pinard-博客园的学习笔记,总结如下: 1 Apriori算法原理总结 Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合 ...

  7. FP Tree算法原理总结(转)

    FP Tree算法原理总结 转自: https://www.cnblogs.com/zhengxingpeng/p/6679280.html 总结得太好了. FP Tree算法原理总结 在Aprior ...

  8. FP Tree算法原理

    作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称FP Growth算法)采用了一些技巧,无论多少数据,只需要扫描两次数据集 ...

  9. Python实现FP树

    目录 FP树的基础知识 疑问与数据构建的想法 Python代码 FP树是用来挖掘最大频繁k项集的一种数据结构,相对来说难度较大,因为在前辈们的博客中,对于FP树的实现讲的是比较清楚了,但是对于FP的编 ...

最新文章

  1. 用于分子生成的数据高效性图语法学习
  2. 忘了root口令解决方法
  3. “习惯性思维”引起的血案
  4. 【PAT (Advanced Level) Practice】1054 The Dominant Color (20 分)
  5. python字符串写入excel-python 将数据写入excel
  6. Extjs4 MVC 示例
  7. 微软正式发布Windows 10 2020年10月更新
  8. 详解Framework
  9. ClientDataSet建立索引和排序
  10. win32程序测试键盘钩子
  11. 学习手记(2018/7/14~2018/7/18)——快乐纪中
  12. JAVA进阶教学之(StringBuider进行字符串拼接)
  13. 作者:詹晓娟(1978-),女,黑龙江工程学院讲师。
  14. 工控蜜罐Conpot部署和入门及高级演变
  15. 9个超级实用的 ES6 特性,超级实用哦!
  16. C#中upd分包与发送,已经实现全部代码
  17. 【2018盘点VR一体机那些事】手机VR眼镜和VR一体机有什么区别?AR,VR眼镜和VR一体机哪个好?
  18. Qt安装配置及连接MySQL
  19. wget: unable to resolve host address的解决方法
  20. 那些年我们一起追过的ILSVRC冠军

热门文章

  1. 开发神技能 | Python Mock 的入门
  2. RT-Thread完整版fal及easyflash移植
  3. 计算机网络中的IP到底是什么?
  4. arduinorgb三色灯_Arduino教程2.2-RGB-LED灯以及PWM
  5. 任务2、闰年判断,计算圆面积
  6. Cas实现子系统登录互踢
  7. ubuntu下的android JNI入门DEMO
  8. 整合管理,整合什么?
  9. 从win+ubuntu双系统安装到ubuntu环境配置和美化
  10. 关于最近研究的绕过某校园网认证登录-DNS隧道-dns2tcp