关联规则挖掘算法在生活中的应用处处可见,几乎在各个电子商务网站上都可以看到其应用

举个简单的例子

如当当网,在你浏览一本书的时候,可以在页面中看到一些套餐推荐,本书+有关系的书1+有关系的书2+...+其他物品=多少¥

而这些套餐就很有可能符合你的胃口,原本只想买一本书的你可能会因为这个推荐而买了整个套餐

这与userCF和itemCF不同的是,前两种是推荐类似的,或者你可能喜欢的商品列表

而关联规则挖掘的是n个商品是不是经常一起被购买,如果是,那个n个商品之中,有一个商品正在被浏览(有被购买的意向),那么这时候系统是不是就能适当的将其他n-1个商品推荐给这个用户,因为其他很多用户在购买这个商品的时候会一起购买其他n-1的商品,将这n个商品做成一个套餐优惠,是不是能促进消费呢

这n个商品之间的关系(经常被用户一起购买)就是一个关联规则

下面介绍一个比较简单的关联规则算法---apriori

首先介绍几个专业名词

挖掘数据集:就是待挖掘的数据集合。这个好理解

频繁模式:频繁的出现在挖掘数据集中的模式,例如项集,子结构,子序列等。这个怎么理解呢,简单的说就是挖掘数据集中,频繁出现的一些子集数据

关联规则:例如,牛奶=>鸡蛋{支持度=2%,置信度=60%}。关联规则表示了a物品和b物品之间的关系,通过支持度和置信度来表示(当然不只是两个物品之间,也有可能是n个物品之间的关系),支持度和置信度定义的值的大小会影响到整个算法的性能

支持度:如上例子中,支持度表示,在所有用户中,一起购买了牛奶和鸡蛋的用户所占的比例是多少。支持度有一个预定义的初值(如上例中的2%),如果最终的支持度小于这个初值,那么这个牛奶和鸡蛋就不能成为一个频繁模式

置信度:如上例子中,置信度表示,在所有购买了牛奶的用户中,同时购买了鸡蛋的用户所占的比例是多少。和支持度一样,置信度也会有一个初值(上例中的60%,表示购买了牛奶的用户中60%还购买了鸡蛋),如果最终的置信度小于这个初值,那么牛奶和鸡蛋也不能成为一个频繁模式

支持度和置信度也可以用具体的数据来表示,而不一定是一个百分比

apriori算法的基本思想就是:在一个有n项的频繁模式中,它的所有子集也是频繁模式

下面来看一个购物车数据的例子

TID表示购物车的编号,每行表示购物车中对应的商品列表,商品为i1,i2,i3,i4,i5,D代表整个数据表

apriori算法的工作过程如下图:

(1)首先扫描整个数据表D,计算每个商品的支持度(出现的次数),得到候选C1表。这里将每个独立的商品都看成一个频繁模式来处理,计算它的支持度

(2)将每个商品的支持度和最小支持度作对比(最小支持度为2),小于2的商品将被过滤,得到L1。这里每个商品的支持度都大于2,所以全部保留

(3)将L1和自身进行自然连接操作,得到候选C2表。也就是进行L1*L1操作,将L1进行全排列,去掉重复的行得到候选C2(如,{i1,i1},{i2,i2}等),C2中的每个项都是由两个商品组成的

(4)再次扫描整个表D, 计算C2中每行的支持度。这里将C2中的每行(两个商品)都当做一个频繁模式计算支持度

(5)将C2中的每项支持度和最小支持度2作比较,过滤,得到L2。

(6)在将L2和自身做自然连接得到候选C3。L2*L2的结果为:{i1,i2,i3},{i1,i2,i5}{i1.i3,i5}{i2,i3,i4}{i2,i3,i5}{i2,i4,i5},{i1,i2}和{i1,i3}的结果为{i1,i2,i3},计算方式为:前n-1个项必须是一致的(就是i1),结果就是前n-1项+各自的第n项(i2,i3)。那么为什么产生的C3中只有{i1,i2,i3},{i1,i2,i5}呢,回头看看apriori算法的基本思想,如果第三个{i1,i3,i5}也是频繁模式的话,那么它的所有子集也应该是频繁模式,而在L2中无法找到{i3,i5}这个项,所以{i1.i3,i5}不是一个频繁模式,过滤。最终结果就是C3

(7)再次扫描整个表D,计算C3中每行的支持度。这里将C3中的每行(三个商品)都当做一个频繁模式计算支持度

(8)将C3中的每项支持度和最小支持度2作比较,过滤,得到L3

由于整个表D最多的项是4,而且只出现一次,所以它不可能是频繁模式,故计算到三项的频繁模式就可以结束了

算法的输出结果应该是;1,L2,L3集合,其中每个项都是一个频繁模式

例如我们得到一个频繁模式{i1,i2,i3},能够提取哪些关联规则?

{i1,i2}=>i3,表示购买了i1,i2的用户中还购买了i3的用户所占的比例。{i1,i2,i3}的出现次数为2,{i1,i2}的出现次数为4,故置信度为2/4=50%

类似的可以算出

{i1,i3}=>i2,confidence=50%

{i2,i3}=>i1,confidence=50%

i1=>{i2,i3},confidence=33%

i2=>{i1,i3},confidence=28%

i3=>{i1,i2},confidence=33%

也就是说,当一个用户购买了i1,i3的时候系统可以将i2一起当做一个套餐推荐给用户,因为这三个商品频繁的被一起购买

但是,通过对算法整个过程的描述,我们可以看到,apriori算法在计算上面的简单例子中,进行了3次全表扫描,而且在进行L1自然连接的时候,如果购物车项的数据是很大(比如100),这时候进行自然连接操作的计算量是巨大的,内存无法加载如此巨大的数据

所以apriori算法现在已经很少使用了,但是通过了解apriori算法可以让我们对关联规则挖掘进一步了解,并且可以作为一个比较基础,和其他关联规则算法做对比,从而得知哪个算法性能好,好在哪里

本文参考书:《数据挖掘概念与技术》

数据挖掘算法之关联规则挖掘(一)apriori算法的更多相关文章

  1. 关联规则挖掘之apriori算法

    前言: 众所周知,关联规则挖掘是数据挖掘中重要的一部分,如著名的啤酒和尿布的问题.今天要学习的是经典的关联规则挖掘算法--Apriori算法 一.算法的基本原理 由k项频繁集去导出k+1项频繁集. 二 ...

  2. 数据挖掘算法之-关联规则挖掘(Association Rule)

    在数据挖掘的知识模式中,关联规则模式是比较重要的一种.关联规则的概念由Agrawal.Imielinski.Swami 提出,是数据中一种简单但很实用的规则.关联规则模式属于描述型模式,发现关联规则的 ...

  3. HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法

    一.关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题.关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的.假设超市经理想更多 ...

  4. 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法

    转自:http://www.cnblogs.com/fengfenggirl/p/associate_apriori.html 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法 我计划 ...

  5. 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)

    在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...

  6. 数据挖掘进阶之关联规则挖掘FP-Growth算法

    数据挖掘进阶之关联规则挖掘FP-Growth算法 绪 近期在写论文方面涉及到了数据挖掘,需要通过数据挖掘方法实现软件与用户间交互模式的获取.分析与分类研究.主要涉及到关联规则与序列模式挖掘两块.关联规 ...

  7. [数据挖掘课程笔记]关联规则挖掘 - Apriori算法

    两种度量: 支持度(support)  support(A→B) = count(AUB)/N (N是数据库中记录的条数) 自信度(confidence)confidence(A→B) = count ...

  8. 数据挖掘算法之关联规则挖掘(二)FPGrowth算法

    之前介绍的apriori算法中因为存在许多的缺陷,例如进行大量的全表扫描和计算量巨大的自然连接,所以现在几乎已经不再使用 在mahout的算法库中使用的是PFP算法,该算法是FPGrowth算法的分布 ...

  9. 关联规则推荐及Apriori算法

    参考这篇文章: http://blog.csdn.net/rongyongfeikai2/article/details/40457827 这条关联规则的支持度:support = P(A并B) 这条 ...

随机推荐

  1. python 复习 4-1 函数、参数、返回值、递归

    函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) ...

  2. python基础复习-1-2 数据类型-str、list、tuple、dict

    数据类型 数字 引号: 123 数值 '123' 字符串 整数:ini long 范围:(-2**31 - 2**31) num = 123 长整型 long (L) num = 123L 浮点型:f ...

  3. DRF的限流功能

    限流,可以对接口访问的频次进行限制,以减轻服务器压力. 全局配置 在settings.py上添加 REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'r ...

  4. Plain Old Data (POD)

    Plain Old Data (POD) POD指的是这样一些数据类型:基本数据类型.指针.union.数组.构造函数是 trivial 的 struct 或者 class. POD用来表明C++中与 ...

  5. MySQL 多列索引优化小记

    MySQL 5.6.30 问题背景 由于爬虫抓取的数据不断增多,这两天在不断对数据库以及查询语句进行优化,其中一个表结构如下: CREATE TABLE `newspaper_article` ( ` ...

  6. [BZOJ4537][Hnoi2016]最小公倍数 奇怪的分块+可撤销并查集

    4537: [Hnoi2016]最小公倍数 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 1474  Solved: 521[Submit][Stat ...

  7. python模块之XlsxWriter

    官网Tutorial:http://xlsxwriter.readthedocs.io/tutorial Xlsx是python用来构造xlsx文件的模块,可以向excel2007+中写text,nu ...

  8. Socket学习总结系列(一) -- IM & Socket

    写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...

  9. 几何+暴力【p1959】 遗址[NOI导刊2009普及(6)]

    题目描述--> P1959 遗址_NOI导刊2009普及(6) 普通方法分析: 因为题目要求是找最大正方形(如果是长方形更麻烦. 讲真,题目不难,耗时间! 根据题目要求,我们要找的是正方形. 我 ...

  10. 队列 P1160 队列安排(啊啊 不会啊)

    洛谷 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为 ...