fp-tree

数据上的关联规则

点点圈 提交于 2020-02-01 08:50:59
关联规则挖掘的目标是发现数据项集之间的关联关系或相关关系,是数据挖掘中的一个重要的课题。 先简单介绍一下关联规则挖掘中涉及的几个基本概念: 定义1:项与项集 数据库中不可分割的最小单位信息,称为项目,用符号i表示。项的集合称为项集。设集合I={i1, i2, ..., ik}是项集,I中项目的个数为k,则集合I称为k项集。 定义2:事务 设I={i1, i2, ..., ik}是由数据库中所有项目构成的集合,一次处理所含项目的集合用T表示,T={t1, t2, ..., tn}。每一个包含ti子项的项集都是I子集。 定义3:项集的频数(支持度计数) 包括项集的事务数称为项集的频数(支持度计数)。 定义4:关联规则 关联规则是形如X=>Y的蕴含式,其中X、Y分别是I的真子集,并且X∩Y=Ø。X称为规则的前提,Y称为规则的结果。关联规则反映X中的项目出现时,Y中的项目也跟着出现的规律。 定义5:关联规则的支持度(Support) 关联规则的支持度是交易集中同时包含的X和Y的交易数与所有交易数之比,记为support(X=>Y),即support(X=>Y)=supportX∪Y=P(XY)。支持度反映了X和Y中所含的项在事务集中同时出现的概率。 定义6:关联规则的置信度(Confidence) 关联规则的置信度是交易集中包含X和Y的交易数与所有包含X的交易数之比

FP-Tree(二)

时光怂恿深爱的人放手 提交于 2020-01-07 20:55:37
public class FPTree { // FP树根节点 FPNode root = new FPNode("Root", -1); // FP树节点线索头 Map<String, FPNode> firstNodeTable = new HashMap<>(); // FP树节点线索尾 Map<String, FPNode> lastNodeTable = new HashMap<>(); // 支持度 private int support = 1; public List<FPNode> table = new ArrayList<>(); private static List<LogTemplate> templates = new ArrayList<>(); public FPTree(List<List<String>> data, int support) { int size = data.size(); List<Integer> count = new ArrayList<>(); for (int i = 0; i < size; i++) { count.add(1); } buildTree(data, count, support, false); } public FPTree(List<LogTemplate> templates, int

频繁项集挖掘之apriori和fp-growth

匿名 (未验证) 提交于 2019-12-03 00:22:01
要弄好这件事不仅需要有效减小搜索空间,而且对每个可能的搜索都必须快速完成。所以频繁项集挖掘在算法实践和编码实现上就要有非常强的技巧。我们就来深入学习apriori和fp-growth中的搜索方式和技巧。这两个算法很容易找到完整的步骤,这里会更注重里面一些精彩之处,但是可能书写不会那么规范,建议和完整算法对照来读。 算法过程如下: 输入:数据集D,支持度minsup 发现 1-项集 (D); c 可以通过一张截图来演示一下apriori的过程: 对应第一张图,连接步是从第k层的项集,向下扩展一层的候选项集,剪枝步能够通过apriori性质过滤掉那些肯定非频繁的项集。 剪枝步也需要对每个k-候选项集的k-1子集都进行一次检测,也很耗费时间;统计频繁次数是必须的,因此需要扫描数据库,经历I/O。那么有必要剪枝,直接统计会不会更好呢,虽然没有试验过,但我估计还是剪枝以后减少候选集的统计更划算。而这两个耗时的步骤在实现上如果能使用到技巧,对算法时间影响最直接。比如剪枝步中k-1候选项集需要逐一向已有的k-1频繁项集查询,这用什么数据结构最好?又如扫描数据库的时候是否能过进行一些压缩,相同的记录进行合并减少遍历次数,以及过滤掉对统计没用的记录? 面对apriori的问题,感觉Fp-growth突然间就冒出来了,它是一个挖掘方式和apriori完全不一样的算法