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。

置信度分数 目标检测_Apriori_02

(4)从项头表底部项依次求出每一项的条件模式基,根据条件模式基递归求出该项的最大频繁项集;

(5)如果不限制频繁项集的项数,则返回步骤4所有的频繁项集,否则只返回满足项数要求的频繁项集。


3.2 FP-Tree 算法小结

FP-Tree更具有应用价值。


       本文只是简述这两个算法的流程,对于第一次接触这两个算法的同学,请参考下面的参考资料。