Apriori算法介绍及实现代码

引言:什么是数据挖掘

         随着大数据时代的到来我们生活中的方方面面都受到了数据挖掘的影响,比如你在淘宝上买了一件商品,当你下次登录的时候在淘宝的界面上会出现各种与你曾经购物信息相关的商品。或者当你用网易云音乐听音乐的时候你从推荐歌单中选择了你喜欢的音乐、删除了你不喜欢的音乐,通过你这次的选择的音乐相关性网易音乐会在下次推荐歌单时对音乐类型进行调整。所以,基于数据挖掘的机器学习方案有一个共有的特性,那就是你与产品的交互信息越多,商品越“懂你”。因为数据是数据挖掘算法的“能源”,你与产品的交互越多,你的数据越全面,挖掘出来的规则也就越准确。

Apriori算法基本概念

  1. 项与项集:设itemset={item1, item_2, …, item_m}是所有项的集合,其中,item_k(k=1,2,…,m)成为项。项的集合称为项集(itemset),包含k个项的项集称为k项集(k-itemset)。
  2. 事务与事务集:一个事务T是一个项集,它是itemset的一个子集,每个事务均与一个唯一标识符Tid相联系。不同的事务一起组成了事务集D,它构成了关联规则发现的事务数据库。
  3. 支持度:一个项集或者规则在所有事物中出现的频率,确定规则可以用于给定数据集的频繁程度。如果一个项目的频繁度大于最小支持度sup_min则将其称之为频繁项,所有频繁项的集合称之为频繁项集。
  4. 置信度:确定T2在包含T1的事务中出现的频繁程度,也就是由T1推出T2的可信度 conf(T1\rightarrow T2)=sup(T1\cup T2)/\left ( T1 \right )。如果计算得出的conf(T1-->T2)大于最小信任度conf_min则说明T1-->T2规则是可靠的。

Apriori算法详解

           为了能够更好的理解Apriori算法下面我们用最经典的购物篮交易(market basket transaction)来举个例子。数据如表所示。

购物篮数据
 breakmilkdiaperbeereggscook
1110000
2101110
3011101
4111100
511100

1

在购物篮数据中第一行表示物品的所有种类,其中每个种类为一个项目,集合为这个数据中的项集。表中另外五行表示五位顾客买的商品,其中1表示购买了其对应的商品0表示没有购买商品。在这里每位顾客买的商品集合及其子集都可以称为一个事务,这些事务的集合称为事务集。我们就是要通过这些事务来挖掘出来事务之间的相关性。

         按照上文所说的步骤,我们首先要计算频繁项集,因为只有频繁项目组成的事务才能挖掘出相关规则。我们设置最小支持度sup_min=2,首先计算一维事务的频繁度,发现只有eggs的频繁度1小于2,所有一维事务中除了eggs均为频繁项,然后在一维基础上增加项目个数,我们通过计算{beer,cook}的频繁度只有1所有二维事务中它也不是频繁的,以此类推得出所有的频繁项集。大家可能想到了这个问题,这每个项目都如此组合从计算量上考虑绝对会产生组合爆炸啊。没错这样成指数背增长数据一旦大了计算机绝对承受不住。所以Apriori算法提出了一个规则,如果事务不是频繁的其所有的子事务均不是频繁的。拿上面的例子来说,如果eggs不是频繁的,它就不用考虑与其他的组合生成子事务了,生成也不是频繁的。这样通过计算频繁项集一定会收敛到1个。

        得到了频繁项集以后我们要通过对子事务和父事务的频繁度求比值得到信任值,如果信任值大于最小信任值conf_min则关联规则成立。比如我们要计算由diaper-->beer的关联规则:首先计算diaper的频繁度supp(diaper)=4,然后计算{diaper,beer}的频繁度supp(diaper \cup beer)=3,所以conf(diaper-->beer)=supp(diaper \cup beer)/supp(diaper)=0.75。

Apriori 代码Python实现

        下面附上github上的Apriori使用Python实现的代码链接https://github.com/llhthinker/MachineLearningLab/tree/master/Frequent%20Itemset%20Mining,其中包含数据生成代码Apriori算法代码和实例测试,可以更加直观的理解算法的思想。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页