1. 背景介绍
从“啤酒与尿布”的案例中,我们得知人们在购买商品时是存在一定的规律的,因此找出这些商品的关联是一件非常有价值的事情。那么,我们如何确定哪些商品是有关联的呢?下面以图一为例,简单介绍三个重要的评估标准。
图一
1.1 支持度
支持度:{X,Y}同时出现的概率。Support(X, Y) = X,Y 同时出现的数量 / 总样本的数量。按照图一所给数据,Support(尿布,啤酒) = 0.08;Support(尿布,面包)=0.01。
1.2 置信度
Confidence(啤酒->尿布)=0.4;Confidence(尿布->面包)=0.1,Confidence(面包->尿布)=0.2。
1.3 提升度
Lift(尿布->面包)=2。当Lift(X->Y)1时,X->Y就是有效的强关联规则;当Lift(X->Y)=1时,表明X、Y相互独立(P(X|Y)=P(X))。
一般来说,要选择一个数据集合中的频繁数据集,则需要自定义评估标准。最常用的评估标准是用自定义的支持度,或者是自定义支持度和置信度的一个组合。
2. Apriori 算法
2.1 Apriori算法流程
Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是以支持度作为判断频繁项集的标准,找出最大的K项频繁项集。其算法步骤如下:
输入:数据集合D, 支持度阈值Smin;
输出:最大的频繁K项集。
(1)遍历整个数据集合D,得到候选频繁k项集(k=1);
(2)扫描候选频繁K项集,计算候选频繁K项集中每一项集的支持度;
(3)从候选频繁K项集中选出支持度不低于Smin的项集作为频繁K项集;若得到的频繁K项集为空,则返回频繁K-1项集;若得到的频繁K项集只有一个项集,则返回该频繁K项集;否则继续下一步;
(4)根据得到的频繁K项集,进行自身连接得到候选频繁K+1项集;
(5)令K=K+1,转入步骤(2);
2.2 Apriori算法小结
从算法的步骤可以看出,Aprior算法每轮迭代都要扫描数据集,因此在数据集很大,数据种类很多的时候,算法效率很低。Aprior算法是一个非常经典的频繁项集的挖掘算法,很多算法都是基于Aprior算法而产生的,包括FP-Tree,GSP, CBA等。
3. FP-Tree 算法
3.1 FP-Tree 算法流程
输入:数据集合D, 支持度阈值Smin;
输出:最大的频繁K项集。
(1)第一次遍历整个数据集合D,统计所有频繁一项集出现的次数,删除支持度低于阈值的频繁一项集,把剩余的频繁一项集放入项头表,并按照支持度递减排序;
(2)第二次遍历整个数据集合D,对于每一条数据做出以下更改:删除非频繁一项集元素、将剩下的频繁一项集元素按照支持度递减排序;
(3)读入排好序的数据集,按照以下方式插入FP树:
a. 排序在前的作为祖先结点,排序在后的作为孙子结点;
b.若插入的数据集与FP树存在公共的祖先,则公共祖先计数加一即可,若插入的是新节结点,则需把新节点链接到项头表中对应的节点,新结点计数为1。
(4)从项头表底部项依次求出每一项的条件模式基,根据条件模式基递归求出该项的最大频繁项集;
(5)如果不限制频繁项集的项数,则返回步骤4所有的频繁项集,否则只返回满足项数要求的频繁项集。
3.2 FP-Tree 算法小结
FP-Tree更具有应用价值。
本文只是简述这两个算法的流程,对于第一次接触这两个算法的同学,请参考下面的参考资料。