数据挖掘 关联规则的FP-growth-tree(FP增长树)的python实现(一)
前言
大学快要过去了,时间不能荒废,因为这个学期在学数据挖掘课,所以就将书上的FP增长树算法用python实现一下,锻炼锻炼自己的python编程能力。写个博客仅仅供自己回顾,也把自己的经验分享一下,这个算法可能会分篇写,因为比较复杂。
一、实现代码
先贴出代码吧,有些同学可能只需要代码→_→
http://git.oschina.net/Dodd/FP-grow-tree
写的比较渣,大神看见请勿喷,可能后期会重写一下梳理梳理逻辑加点注释,不过目前可能没时间了。
二、大白话讲频繁集
抛出一个问题:啥是频繁集?
频繁集就是支持度超过最小支持度的所有事务项独立组合而成的集合。
例如有如下事务数据
[‘milk’,’eggs’,’bread’,’chips’],
[‘eggs’,’popcorn’,’chips’,’beer’],
[‘eggs’,’bread’,’chips’],
[‘milk’,’eggs’,’bread’,’popcorn’,’chips’,’beer’],
[‘milk’,’bread’,’beer’],
[‘eggs’,’bread’,’beer’],
[‘milk’,’bread’,’chips’],
[‘milk’,’eggs’,’bread’,’butter’,’chips’],
[‘milk’,’eggs’,’butter’,’chips’]
每一行代表一个事务
其中[‘chips,eggs’] 这个在一共9个事务中出现了6次,则[‘chips,eggs’]的支持度为6,大于最小支持度,则说其是频繁的。
FP增长树算法就是求一个事务集的所有频繁集。
二、算法思想
请先自行百度,本篇文章可能后期补全。
三、算法描述
在FP-Tree中,最重要的几个算法,我分开来写,所有思路大致和我的代码相同,并且会在后边的代码中具体讲实现方式。
1.建树
首先获得当前事务集(条件模式基,后边说明为什么也可以是条件模式基)的一项频繁集,什么?一项频繁集?什么是一项频繁集
上边的那个事务数据例子,它的一项频繁集就是
[(‘eggs’, 7), (‘chips’, 7), (‘bread’, 7), (‘milk’, 6), (‘beer’, 4)]
(我的代码中有好多注释掉的print,有绝大部分都是用来输出中间过程的,有兴趣的可以去掉注释看看)
上边的一项频繁集就是对每个项进行计数,然后去掉不频繁的项得到的
有了一项频繁集,加上事务数据,咱就来建树吧
算法1.建树
输入: 有序一项频繁集S 和事务数据data
输出:一棵FP树
伪代码
getFPTree(S,data): #我的代码中的fptree.getRootTree函数
for t in data #t为每一个事务
node=树的头节点headnode
for item in S #item为频繁的项
if item in t: #如果item这个项在事务t中
if 当前节点node的孩子中有item:
则该孩子节点的权值加一
else:
新建一个节点thenode挂在node上,权值为1
thenode同时要通过引用或者指针,或者数组的方式加入到头表headTable(FP树的另一关键之一)中
node=thenode 将当前节点置为这个节点进入下一个项的循环
return (headnode,headTable)
至此,建树则完成了,下一篇再文章讲FP-Grow算法,未完待续。。。。。