一、初步理解
关联规则是数据挖掘技术的一个活跃的研究方向之一,其反映出项目集之间有意义的关联关系。关联规则可以广泛地应用于各个领域,既可以检验行业内长期形成的知识模式,也能够发现隐藏的新规律。有效地发现、理解和运用关联规则是数据挖掘任务的一个重要手段。
在处理大量数据时,很重要的一点是要理解不同实体间相互关联的规律。通常,发现这些规律是个极为复杂的过程。关联规则是一种十分简单却功能强大的、描述数据集的规则,这是因为关联规则表达了哪些实体能同时发生。
关联规则的传统应用多见于零售业(适用于线下而非线上)。关联规则挖掘的一个典型例子是购物篮分析。该过程通过发现顾客放入其购物篮中不同商品之间的联系,分析顾客的购买习惯。通过了解哪些商品频繁地被顾客同时购买,这种关联的发现可以帮助零售商指定营销策略。例如,在同一次去超市,如果顾客购买牛奶,他也购买面包(包括什么类型的面包)的可能性有多大?通过帮助零售商有选择地经销和安排货架,这种信息可以引导销售。例如,将牛奶和面包尽可能放近一些,可以进一步的刺激一次去商店同时购买这些商品。全球最大的零售商沃尔玛(Walmart)通过对顾客购物清单的数据挖掘发现了“尿布→啤酒”的关联规则,后来沃尔玛就把尿布和啤酒摆放在一起,从而双双促进了尿布和啤酒的销量。
关联规则的另一应用领域是健康医疗,利用关联规则找出经常同时发生的健康问题,以便诊断出患一种疾病的患者还可能进行额外的检查,从而判断该患者是否存在其他与此疾病经常连带发生的身体问题。
其他应用领域还包括入侵检查、web日志分析、数据库访问模式、文档抄袭检测等等。
二、关联规则的概念
设是项的集合。设任务相关的数据D是数据库事务的集合,其中每个事务T是项的集合,使得。每个事务有一个标识符,称作TID。
2.1 相关定义
支持度定义:假设有个支持度阀指(support threshold) s。 如果A是一个项集,A的支持度是指包含I的事务数目。或者是包含I的事务数目与总事务数的百分比。如果支持度不小于s,则称A是频繁项集(frequent itemset)。
A的支持度(support)= 包含A的事务数 或者 包含A的事务数/总的事务数
2.2 关联规则(association rule)定义
关联规则的形式为A->j,其中A是一个项集,而j是一个项。该关联规则的意义为,如果A中所有项出现在某个事务中的话,那么j“有可能”也出现在这一事务中。
这个“有可能”可以通过定义规则的可信度/置信度(confidence)来形式化的给出。
A->j的可信度(confidence) = A∪j 的支持度/A的支持度
但是如果包含A的购物篮中包含j的概率等于所有购物篮中包含j的概率, 比较极端的是实际上所有的购物篮(事务)都包含j,那么即使A包含j的概率为100% 也是没有意义的,为了区分出这种A对j的兴趣度衡量。
A->j的兴趣度(interest) = A->j的可信度 - j的支持度
当这个值很高或者是绝对值很大的负值都是具有意义的。前者意味着购物篮中A的存在在某种程度上促进了j的存在,而后者意味着A的存在会抑制j的存在。
同时满足最小支持度阈值(min_sup)和最小置信度阈值(min_conf)的规则称作强规则。
项的集合称为项集(itemset)。包含k个项的项集称为k-项集。集合{computer,financial_management_software}是一个2-项集。
识别有用的关联规则并不比发现频繁项集难很多,以为他都是以支持度为基础的。实际当中,对于传统的零售商店的销售而言,“相当地高”大概相当于所有购物篮的1%左右。
三、预选算法与数据结构的数学分析
我们假定购物篮组成的文件太大以至于无法在内存中存放。因此,任何算法的主要时间开销都集中在将购物篮或者事务从磁盘读入内存这个过程。。
3.2 项集计数中内存使用
3.2.1 三角矩阵方法(triangular matrix)
在将项都编码成整数之后,我们可以使用三角矩阵来存放计数结果,i<j,a[i,j]。对每一个对需要空间一个integer = 4 bytes
3.2.2 三元组方法
3.2.3 二元组计数
四、A-Priori算法
关联规则中最著名的算法当数Apriori算法。
图1、Apriori算法的内存的使用情况,左边为第一步时的内存情况,右图为第二步时内存的使用情况