小白学数据分析之关联分析算法篇Apriori

早些时候写过关于购物篮分析的文章,其中提到了C5.0和Apriori算法,没有仔细说说这算法的含义,昨天写了一下关联分析的理论部分,今天说说关联分析算法之一的Apriori算法,很多时候大家都说,数据分析师更多的是会用就可以了,不必纠结于那些长篇累牍的理论,其实我觉得还是有点必要的,你未必要去设计算法,但是如果你掌握和熟知一个算法,这对于你如何驾驭和使用这个算法是很有帮助的,此外每个算法都有使用的局限性,比如空间和时间复杂度,使用条件约束。最典型的就是我们难道一份原始数据,然后经过数据处理要进行算法模拟分析,但是此时你会出现一个问题,我需要处理哪些数据,如何处理?而这就需要你对你所使用的算法必须熟悉,比如能够操作的数据格式,类型。比如GRI算法要求使用的数据必须是事实表的方式存储,这样的算法特点必须建立在对于算法的了解把握层次上。

Apriori算法

其名字是因为算法基于先验知识(prior knowledge).根据前一次找到的频繁项来生成本次的频繁项。Apriori是关联分析中核心的算法。

Apriori算法的特点

只能处理分类变量,无法处理数值型变量;

数据存储可以是交易数据格式(事务表),或者是事实表方式(表格数据);

算法核心在于提升关联规则产生的效率而设计的。

Apriori的思想

正如我们之前所提到的,我们希望置信度和支持度要满足我们的阈值范围才算是有效的规则,实际过程中我们往往会面临大量的数据,如果只是简单的搜索,会出现很多的规则,相当大的一部分是无效的规则,效率很低,那么Apriori就是通过产生频繁项集,然后再依据频繁项集产生规则,进而提升效率。

以上所说的代表了Apriori算法的两个步骤:产生频繁项集和依据频繁项集产生规则。

那么什么是频繁项集?

频繁项集就是对包含项目A的项目集C,其支持度大于等于指定的支持度,则C(A)为频繁项集,包含一个项目的频繁项集称为频繁1-项集,即L1。

为什么确定频繁项集?

刚才说了,必须支持度大于我们指定的支持度,这也就是说能够确定后面生成的规则是在普遍代表性上的项目集生成的,因为支持度本身的高低就代表了我们关联分析结果是否具有普遍性。

怎么寻找频繁项集?

这里不再讲述,直接说一个例子大家就都明白了。例子来源于Fast Algorithms for Mining Association Rules

Apriori寻找频繁项集的过程是一个不断迭代的过程,每次都是两个步骤,产生候选集Ck(可能成为频繁项集的项目组合);基于候选集Ck计算支持度,确定Lk。

Apriori的寻找策略就是从包含少量的项目开始逐渐向多个项目的项目集搜索。

数据如下:

我们看到,数据库存储的数据格式,会员100购买了 1 3 4三种商品,那么对应的集合形式如右边的图所示。那么基于候选集C1,我们得到频繁项集L1,如下图所示,在此表格中{4}的支持度为1,而我们设定的支持度为2。支持度大于或者等于指定的支持度的最小阈值就成为L1了,这里{4}没有成为L1的一员。因此,我们认定包含4的其他项集都不可能是频繁项集,后续就不再对其进行判断了。

 

 

此时我们看到L1是符合最低支持度的标准的,那么下一次迭代我们依据L1产生C2(4就不再被考虑了),此时的候选集如右图所示C2(依据L1*L1的组合方式)确立。C2的每个集合得到的支持度对应在我们原始数据组合的计数,如下图左所示。

 

此时,第二次迭代发现了{1 2} {1 5}的支持度只有1,低于阈值,故而舍弃,那么在随后的迭代中,如果出现{1 2} {1 5}的组合形式将不被考虑。

 

如上图,由L2得到候选集C3,那么这次迭代中的{1 2 3} { 1 3 5}哪去了?如刚才所言,{1 2} {1 5}的组合形式将不被考虑,因为这两个项集不可能成为频繁项集L3,此时L4不能构成候选集L4,即停止。

如果用一句化解释上述的过程,就是不断通过Lk的自身连接,形成候选集,然后在进行剪枝,除掉无用的部分。

根据频繁项集产生简单关联规则

Apriori的关联规则是在频繁项集基础上产生的,进而这可以保证这些规则的支持度达到指定的水平,具有普遍性和令人信服的水平。

以上就是Apriori的算法基本原理,留了两个例子,可以加深理解。

例子1:

例子2:

时间: 2024-08-30 22:04:28

小白学数据分析之关联分析算法篇Apriori的相关文章

小白学数据分析之关联分析理论篇

关联分析的学习 在说关联分析之前,先说说自己这段时间的一些感受吧,这段时间相对轻松一些,有一些时间自己自己来学习一些新东西和知识,然而却发现捧着一本数据挖掘理论的书籍在一点一点的研读实在是很漫长,而且看过了没有什么感觉.数据这一行理论很多,算法很多,模型很多,自己现在一直是结合业务来做的数据分析与挖掘,相比电商而言,游戏业做的数据大多很糙,但是仅仅结合业务和运营,更加注重我们客户的质量和维护,当然这不是说电商没做,实际上电商一直在做,然而最近一次经历发现,我们过多的时候去讨论了算法,模型,新理论

小白学数据分析------->充值记录分析

   充值记录分析的方法有很多种,维度很多,今天就说说一个比较初级的分析方法,希望对于各位有一定的帮助和指导. 首先来看一下充值记录的格式,一般而言我们取到的数据都是交易格式(什么事交易格式这里不说了,大家应该都了解) 账户 充值额 充值大区 充值时间 1 100 A 2012-4-9 1 25 A 2012-4-7 2 50 A 2012-4-9 3 4 4 100 200 50 A A B 2012-4-5 2012-4-2 2012-4-1                     以上为我

小白学数据分析----->SPSS探索分析实践操作[不同生命周期玩家的充值探索分析]

SPSS为我们提供了探索分析,所谓探索分析之所以是探索,是因为有时候我们对于变量的分布特点不是很清楚,探索的目的在于帮助我们完成以下的工作: 识别数据:例如数据的分布形式.异常值.缺失值: 正态性检验:服从正态分布的检验: 方差齐性检验:不同数据组的方差是否相等. 有关于方差齐性检验原理.正态分布这里不累述,这里主要介绍SPSS的探索分析使用. 数据文件 这里使用的文件是不同周期的充值用户的充值数据,这里主要是针对流失用户和活跃用户的充值数据. 具体操作 首先将源文件加载到SPSS中,选择菜单分

小白学数据分析------>日活跃人数分析

从今天开始,特开辟一个小专栏,题目暂定为小白学数据分析,鄙人不才,在数据分析的道路上走的崎岖坎坷,同时数据分析本身是一个多面和复杂的工作,要懂得理论(统计.概率.数据挖掘.算法.模型)更要懂得业务,懂得行业理论,还要有灵活多变的思维,想想还是很复杂和麻烦的,所讲内容不但是理论,不仅是数据,尽量把这些东西综合起来,立体的来看,鄙人水平有限,很多的内容是尝试和改进,参考了很多的材料,在木有高人指点和牛人帮助的情况下,我只能借助浩瀚的网络知识和自己的悟性,今天决心拿出来给各位主要是帮助大家和我一起进步

小白学数据之NoSQL数据库 进阶篇

写在前面 这篇是小白学数据系列的NoSQL数据库的第二篇:进阶篇.数据分析方向的从业人员可以从中获取数据仓库软件市场的现状和分析,以增加自己的知识储备,为可能的技术转型打基础.而工程师可以找到关于NoSQL主流产品的分析介绍以及选择数据库的一些准则.NoSQL不是万能药,采用技术最好不要跟风,选择适合自己数据和应用的才是最好的哟~没有看过NoSQL基础篇的读者可以在文末的历史文章回顾中找到. ◆ ◆ ◆ 小白问:上次问了NoSQL,SQL的区别,好像有点忘了,我们可以温故而知新一下吗? 答:..

小白学数据分析----->付费用户的金字塔模型实践操作

免费游戏中付费用户模型分析 最近看了不少文章,对于付费用户的模型也有了很深刻的理解和认识,早先我做了不少关于大R,中间R,低端R用户的分析,想来还是觉得草草了事,近来有网友提出来,理论探讨的多了些,实践上手的东西少了点,毕竟还是叫做小白学数据分析啊,今天就把以前说过的付费用户的模型具体的实践一下. 感悟和理论 得到的灵感首先要感谢Nicholas Lovell 的这篇文章,是我得到了一些处理和分析这个模型的办法.连接如下: http://www.gamesbrief.com/2011/11/wh

小白学数据分析----->数据指标 累计用户数的使用

小白学数据分析--à数据指标累计用户数的使用 累计用户数是指注册用户数的累计,即可以认为是新用户的累计.在一般的数据统计中,我们基本上都会涉及到这个指标,且这个指标是逐渐累加的,比如: 时间                   注册用户数[新登用户]           累计注册用户数 1日                    100                                                 100 2日                    120   

小白学数据分析----->流失分析设计

前段时间说过一些关于玩家生命周期的问题,其实那些有点大,有点虚,从宏观的角度了解我们此时此刻正在做的分析是属于那一部分,哪一个体系的,说实话,这是为了建立一种意识而要做的工作,玩家生命周期价值源于电信行业的客户生命周期管理和PLC(产品生命周期)的解读和应用,限于本人水平和能力因素,不够深刻,全面,在此请各位谅解,以后的内容会逐步深入到这个体系之下的很多细节的问题探讨,今天就和大家简单说说流失率. 说到流失率,我们可以考察,可以分析,可以利用的点实在是太多了,这里我也不可能把所有的东西都覆盖,仅

小白学数据分析------>把握分析标准与敏感度

写在正文之前,想说几句话,今天是2012年3月16日,是我开博客以来的第9个月,9个月让我成长的非常迅速,这期间我收获了很多东西,认识了很多人,开了群,见了网站,持续的写博,从来没想到我的博客会有这么大的作用,从来没有SEO,从来没推广,从来没有任何宣传,我想到和我做的就是把我自己的成长纪录下来,把网游数据分析的点滴分享出来,当然我希望有人看,但是我毕竟不是高手,只是一个小白,小白只能是学习心得的纪录和整理,帮助自己理顺思路,很希望自己的文章有人看,因为那样就会有高手帮助我指点问题.今天 博客9