关联分析算法有哪些(关联分析的基本原理及算法思路)
本篇文章给大家谈谈关联分析算法有哪些,以及关联分析的基本原理及算法思路对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
常见的关联规则挖掘算法包括
典的关联规则挖掘算法包括Apriori算法和FP-growth算法。
apriori算法多次扫描交易数据库,每次利用候选频繁集产生枝盯辩频繁集;而FP-growth则利用树形结构,无需产生候选频繁集而是直接得到频繁集,大大减少扫描交易数据库的次数,从而提高了算法的效率。但是apriori的算法扩展性较好,可以用于并行计算等领域。
Apriori algorithm是关联规则里一项基本算法。是由Rakesh Agrawal和Ramakrishnan
Srikant两位博士在1994年提出的关联规则挖掘算法。
关联规则的目的就是在一个数据集中找出项与项之间的关系,也被称为购物蓝分析
(Market Basket analysis),因为“购物蓝分析”很贴切的表达了适用该算法情景中的一个子集。
大数据挖掘的算法:
1、朴素贝叶斯,超级简单,就像做一些数数的工作。如果条件独立则团假设成立的话,NB将比鉴别模型收敛的更快,所以你只需要少量的训练数据。即使条件独立假设不成立,NB在实际中仍然表现出惊人的好。
2、
Logistic回归,LR有很多方法来对模型正则化。比起NB的条件独立性假设,LR不需要考虑猛缺样本是否是相关的。
与决策树与支持向量机不同,NB有很好的概率解释,且很容易利用新的训练数据来更新模型。如果你想要一些概率信息或者希望将来有更多数据时能方便的更新改进模型,LR是值得使用的。
3、决策树,DT容易理解与解释。DT是非参数的,所以你不需要担心野点(或离群点)和数据是否线性可分的问题,DT的主要缺点是容易过拟合,这也正是随机森林等集成学习算法被提出来的原因。
4、支持向量机,很高的分类正确率,对过拟合有很好的理论保证,选取合适的核函数,面对特征线性不可分的问题也可以表现得很好。SVM在维数通常很高的文本分类中非常的流行。
数据挖掘- 关联分析算法
关联分析,顾名思义就是找出哪几项之间是有关联关系的,举个例子:
以上是五个购物记录,从中我们可以发现,购买了尿布的人其中有3个购买了啤酒,那么久我们可以推测,尿布和啤酒之间有较强的关联关系,尽管他们之间看起来并没有什么联系,也就是能得到规则:
因为购物分析能较好地描述关联分析,所以又被叫做 购物篮分析 。
为了较好的描述这个分析的各种名词,我们把上面的表格重新设计一下:
把每一个购物订单中,涉及到的商品都变成1,没涉及到的变成0,也就是将各个商品的购买记录 二元化 。
当然肯定也有多个分类的情况。
那么面包,牛奶这些就叫数据集的 项 ,而他们组合起来的子集就叫做 项集 。可以为空,空集是不包含任何项的项集,如果一个项集包含k个子项,就叫做k-项集。
订单12345叫做 事务 ,某个项集在所有事务中出现多少次,叫做项集的 支持度计数 。
在上面的表格中,项集{啤酒、尿布、牛奶}的支持度计数为2,因为有两个事务(3、4)包含这一项集。
用 支持度 和 置信度 来衡量,假定存在规则 ,其中X和Y是 不相交 的项集,则支持度为:
其中N是数据集中的事务个数,相当于表示该规则在数据集中出现了多少次。
置信度为:
置信度的意思就是,在出现X的情况下,有多少次同时出现了Y,代表这个关联规则的频繁程度。
注意置信度的分母是 ,因此这个评价可能会存在一定的问题。
关联分析的核心目标就是找出支持度大于等于某个阈值, 同时 置信度大于等于某个阈值的所有规则,这两个阈值记为 和 。
为了更有效率的完成这个过程,通常把关联规则算法分为两步:
可以看出来,樱备首先要求得频繁项集,这步骤的开销很大,但是只需要考虑支持度就可以了,第二步只考虑置信度就可以了。
下面就可以分两步来解析算法:
首先我们可以把项集联想成一个树形结构,每层代表着不同的k-项集,依层递增,非叶子节点来自于他的几个父节点的并集,如图:
我们肯定不能通过传统的方式,遍历这些节点,算出支持度,然后筛选掉不满足最小支持度的那些,这样开销太大,因此我们引入先验原理,来辅助剪枝。
这个原理不难想象,假如一个项集{a,b}是非频繁项集,那么{a,b,c}肯定也是,因为ab是,在{a,b,c}中与之关联的c必须在ab出现之后才存在,因此他的支持度肯定不会大于{a,b}。
频繁的就是支持度大于等于最小支持度的项集,非频繁就是小于的。
我们可以利用这一定理,把非频繁项集的超集一并从树中减去,这样就能大大的降低计算次数,如图:
虚线圈上的,就是在{a,b}确定是非频繁项集之后,剪掉的超集,这些是不用计算的。
根据这个原理,可以说一下Apriori算法。
根据上面说的先验原理,Apriori算法先从项集宽度最低的1开始,遍历所有的项集支持度,找出频繁项集(因为第一层在找出支持度之前),之后根据先验原理,挑选任意两个频繁项集组成2-频繁项集(很简单,如果挑非频繁的,那组成的项集就不是频繁项集了),再用2-项集挑选3-项集,直到挑选不出更高层次的项集为止,把这些项集作为 候选项集 ,如图:
图中1-项集中,啤酒,面包,尿布,牛奶的支持度大于等于3(设 为3),则由他们组成2-项集,继续筛选满足支持度不小于3的项集,再由2-项集生成3-项集,这就是 Apriori 算法筛选频繁项集的基本步骤。总结如下:
上面提到了用k-1项集生成k-项脊稿毁集,那么如何才能最有效率的产生k-项集呢,这里用了 的方法,也就是找到一对(k-1)-项集,当他们的前(k-2)项都相同时,进行合并,合并之后的结果就是{ },因为前k-2项是相同的。
举个例子:
上面说了如何产生候选项集,接下来就是如何更敬尘有效率的确定支持度计数了,同样,如果遍历一个一个查的话效率是很低的,我们可以用枚举的方法遍历每个事务包含的项集,以查找3-项集为例,如图:
因为我们要查3-项集,因此树状结构就分到3-项集为止。
因为3-项集的开头第一个项肯定在1,2,3之间,我们就设定这三个数为三个分支,无论到哪个节点,都严格按照这个来分(1在左,2在中,3在右),在下面的层次中如何碰到比123更大的,则再向右分,就可以得到图中的关于事务t的所有3-项集。
有了所有项集的列表,我们可以用候选项集去匹配这些项集,从而看t中是否包含候选项集,如果包含,则支持度+1。
可以使用Hash树来进行匹配,从而实现支持度计数。
如下图,就是一个Hash树的例子,每个内部节点都使用Hash函数 来确定应当沿着当前节点的哪个分支向下,所以1,4,7就到了同一分支。
我们对于单个事务,可以遍历Hash树,设事务为t,则保证所有包含属于事务t的候选3-项集的叶节点至少访问一次。
由于我们之前已经通过树的方式枚举出了t中所有的3-项集,那么我们跟这个Hash一走分支,找到对应3-项集的就+1支持度,即可算出每个候选项集的支持度。
提取规则相应的比较简单,设有 频繁项集Y ,我们忽略前件为空和后件为空的规则,每个频繁项集能产生 个关联规则,提取方法就是将Y划分为两个 非空 的子集X和Y-X,使得 满足 置信度阈值 也就是最小置信度。
同样的,提取规则也有一个原理:
参考频繁项集的寻找过程,我们可以利用树形结构对规则进行剪枝。
树的每层对应规则后件中的项数,如图:
假设规则{ } { }不满足置信度阈值的要求,那么可以丢弃后件包含{a}的所有规则,如上图所示。
至此我们经历了寻找频繁项集和提取规则的过程,基本Apriori算法就算完成了,不过还有一些需要考虑的细节。
在实际应用过程中,往往频繁项集产生的数量可能很大,所以很难表示,我们需要寻找一种方法,找到一些有代表性的频繁项集,以保证其描述性。
通常有如下两种方法:
如图:
这种表示很明显降低了需要表示项集的个数,我们需要别的候选项集,直接取极大频繁项集的子集就行,任意一个肯定都是。
但是这么做,表示不出他们子集的支持度,所以就需要再遍历数据集,确定非极大频繁项集的支持度,不是很方便。
所以我们还可以用闭频繁项集来表示。
先来看闭项集的概念:
那么闭频繁项集的概念就很好理解了:
如图,我们假设 是40%。
这种做法可以保证支持度和描述性。
之前举的例子都是二元分类的,要么1要么0,下面看多分类的,我们很容易想到可以用独热编码解决这个问题,把所有分类二元化,但是这样就存在一个问题,有的属性值可能会不够频繁,没办法成为频繁项集。
所以最好是把多分类的项根据实际情况进行分类化,不要针对每个属性都设置独热编码。
或者将不太频繁的属性值合并为一个称作其他的类别。
所以面对多分类属性,我们要做的就是:
独热编码二元化-针对这些值进行一定的合并,或者分类或者并为其他 - 删除冗余的项 - 避免包含多个来自同一属性的项的候选集(例如{ },被写到了一个候选集中,但是实际上这种情况不可能发生,由于独热编码进行的二元化而产生了这种情况,需要避免。)
我们也会遇到一些连续属性,可以通过以下几种方式处理:
这种做法有一个问题就是分类的效果取决于区间的个数和跨度,如果取不好很难得到理想的结果。
如果要验证统计出的值是否具有统计意义,可以参考假设检验中针对不同比较的不同公式,这里不再举例。
把mini-Apriori算法中的支持度代入到Apriori算法的支持度中即可。
举个例子:
想要衡量模型的好与坏,肯定要有一个评估指标,我们可以根据业务实际去评价,这是主管评价,叫做 主观兴趣度度量 ,这个显然要结合业务,所以我们要看看一些客观指标。
指标的评价往往依赖于相依表,这个相依表有点类似于混淆矩阵:
其中A,B代表在事务中出现,!A,!B代表没有在事务中出现,空列空行例如 代表A的支持度计数, 表示包含B但是不包含A的事务的个数。
最基本的就是置信度和支持度了,但是这两种指标都很难做到客观评价模型,会受到多种因素的影响。
我们可以用 兴趣因子 来衡量模型:
首先我们引入 提升度 的概念,它用于计算规则置信度和 规则后件 中项集的支持度之间的比率,
对于二元变量,提升度等价于另一种称作兴趣因子的客观度量,定义为:
其中N是事务个数。
如果
但是兴趣因子有一定局限性,看上图,{p,q}和{r,s}的兴趣因子分别为1.02和4.08,虽然p和q同时出现在88%的文档中,但是他们的兴趣因子接近于1,表明他们相互独立,另一方面,{r,s}的兴趣因子闭{p,q}的高,但是r和s很少出现在一个文档中,这种情况下,置信度要比兴趣因子更可信,置信度表明p和q之间的联系94.6%远高于r和s之间。
另外还可以引入 相关系数 ,逻辑类似于向量的相关系数:
相关度的值从-1到1,如果变量相互独立,则Φ=0。
他的局限性在于在食物中把同时出现和同时不出现视为同等重要,这往往不符合实际规律,同时对于倾斜的变量很难度量。
IS度量 可以用于处理非对称二元变量,定义如下:
IS数学上等价于二元变量的余弦度量。
但是IS取决于A和B的支持度,所以存在与置信度度量类似的问题——即使是不相关或者负相关的模式,度量值也可能相当大。
支持度,全置信度,可以应用于较大的项集,兴趣因子,IS、PS、Jaccard系数等使用多维相依表中的频率,可以扩展到多个变量。
针对大多数项具有较低或中等的频率,但是少数项具有很高频率的数据集。
交叉支持模式是一个项集 ,他的支持度比率是:
小于用户指定的阈值 。
需要保证全置信度小于上面的支持度比率,而全置信度是:
其中 .
全置信度能够确保项集中的项之间是强关联的,例如,假定一个项集X的全置信度是80%,如果X中的一个项出现在某个事物中,则X中其他的项至少也有80%的几率属于同一个事务,这种强关联模式又称 超团模式 。
[img]第九章 数据关联规则分析算法——基于Apriori算法的关联项分析
9.1 基于Apriori算法的关联分析
Aprior算法是关联规则分析中较为经典的频繁项集算法。关联规则反映的是两个或多个事物相互之间的依存性和关联性。如果两个或者多个事物相互之间存在一定的关联关系,则它们之间存在一种关联规则老唤使得它们之间可以进行搭配。
9.1.1 基本概要
Apriori算法利用频繁项集的先验知识,不断地按照层次进行迭代,计算数据集中的所有可能的频繁项集,它的分析主要包括两个核心部分。
1、根据支持度找出频繁项御含好集;
2、根据置信度产生关联规则。
9.1.2 Apriori算法原理
基本流程:
1、扫描历史数据,并对每项数据进行频率次数统计。
2、构建候选集 ,并计算其支持度,即数据出现频率次数与总数的比镇铅。
3、对候选项集进行筛选,筛选的数据项支持度应当不小于最小支持度,从而形成频繁项集 .
4、对频繁项集 进行连接生成候选集 ,重复上述步骤,最终形成频繁K项集或者最大频繁项集。
Apriori算法存在两大定理:
1、如果一个集合是频繁项集,那么它的所有子集都是频繁集合。
2、如果一个集合它不是频繁集合,那么它的所有超集都不是频繁项集。
9.1.3 Apriori算法优缺点
优:运算过程非常简单,理论方法也比较容易理解,对数据特征的要求也相对较低。
缺:
1、产生候选集是产生较多的组合,没有考虑将一些无关的元素排除后再进行组合。
2、每次计算项集的过程中都会扫描元素的数据表。
针对不足推出不断改进的Apriori算法:
1、将数据表(事务表)进行压缩。
2、利用哈希表的快速查找特性对项集进行计数统计。
3、合理选样。
关联规则挖掘算法的介绍
学号:17020110019 姓名:高少魁
【嵌牛导读】关联规则挖掘算法是数据挖掘中的一种常用算法,用于发现隐藏在大型数据集中令人感兴趣的频繁出现的模式、关联和相关性。这里将对该算法进行简单的介绍,之后通过Apriori算法作为实例演示算法执行结果。
【嵌牛鼻子】数据挖掘 关联规则挖掘 python
【嵌牛正文】
一、算法原理
1、基本概念
关联规则用于发现隐藏在大型数据集中令人感兴趣的频繁出现的模式、关联和相关性。 而 Apriori算法则是经典的挖掘频繁项集的关联规则算法,它通过层层迭代来寻找频繁项集,最后输出关联规则:首先扫描数据集,得到 1-频繁项集,记为 L1,通过合并 L1得到 2-频繁项集 L2,再通过 L2找到 L3,如此层层迭代,直到找不到频繁项集为止。
在Apriori算法中,定义了如下几个概念:
⚫ 项与项集 :设 I={i1,i2,…,im}是由 m个不同项构成的集合,其中的每个 ik(k=1,2,…,m)被称为一个项 (Item),项的集合 I被称为项集和,即项集。在实验中,每一条购物记录可以被看做 一个项集,用户购买的某个商品即为一个项。
⚫ 事务与事务集:神乎事务 T是项集 I的一个子集,而事务的全体被称为事务集。
⚫ 关联规则:形如 A=B的表达式,其中, A和 B都属于项集 I,且 A与 B不相交。
⚫ 支持度:定义如下 support(A=B) = P(A B),即 A和 B所含的项在事务集中同时出现的概率。
⚫ 置信度:定义如下 confidence(A⇒B)=support(A⇒B)/support(A)=P(A B)/P(A)=P(B|A),即如果事务包含 A,则事务中同时出现 B的概率。
⚫ 频繁项集:如果项集 I的支持度满足事先定义好的最小支持度阈慧液值(即 I的出现频度大于相应的最小出现频度阈值),则 I是频繁项集。
⚫ 强关联规则:满足最小支持度和最小置信度的关联规则,即待挖掘的关联规则。
根据以上概念,要实现关联规则的挖掘,首先要找到所有的频繁项集,之后找出强关联规则(即通过多次扫描数据集,找出频繁集,然后产生关联规则)。
2、挖掘频繁项集
在该步骤中有两个较为重要的部分 :连接和修剪。连接步骤即使用k-1频繁项集,通过连接得到 k-候选项集,并且只有相差一个项的项集才能进行连接,如 {A,B}和 {B,C}连接成为 {A,B,C}。修剪步骤基于一个性质:一个 k-项集,如果它的一个 k-1项集(子集)不是频繁的,那么它本身也不可能是频繁的。 因此可以基于这个性质,通过判断先验性质来对候选集进行修剪。
3、产生关联规则
经过连接和修剪之后,即找到了所有的频繁项集,此时可以在此基础上产生关联规则,步骤如下
(1)对于每个频繁项集 l,产生 l的所有非空子集(这些非空子集一定是频繁项集);
(2)对于 l的每一个非空子集 x,计算 confidence(x = (l-x)),如果 confidence(x = (l-x)) confmin,那么规则 x = (l-x)”成立。
二、算法设计
1、数据集
通过语句 import xlrd导入相关的库来进行数据的读取 。数据内容为十条购物记录 ,每条购物记录有若干个商品,表示某个顾客的购买记录 ,如图
对于数据加载部分 使用了 xlrd库中的函数 open_workbook来 打开一个表格文件,使用sheet_by_index函数得到一个工作表, row_values函数即可读取表格中的内容。由于每个购物记录的商品数不一定相同,导致读取的内容含有空格 (’ ’),因此对数据进行删减以得到紧凑的数据 ,最终读取数据的结果以列表的游碧悉形式返回。
2、连接
对于连接部分,主要目标是根据已有的k-1频繁项集生成 k-候选频繁项集。算法步骤为:首先将项集中的项按照字典顺序排序,之后将 k-1项集中两个项作比较,如果两个项集中前 k-2个项是相同的,则可以通过或运算(|)将它们连接起来。
3、修剪
修剪操作主要使用一个判断函数,通过传入连接操作后的项集和之前的k-1频繁项集,对新的项集中的每一个项的补集进行判断,如果该补集不是 k-1频繁项集的子集,则证明新的项集不满足先验性质,即一个频繁项集的所有非空子集一定是频繁的 ,否则就满足先验形式。返回布尔类型的参数来供调用它的函数作判断。
经过连接和修剪步骤之后,项基要成为频繁项集还必须满足最小支持度的条件,笔者设计了generateFrequentItems函数来对连接、修剪后产生的 k-候选项集进行判断,通过遍历数据集,计算其支持度,满足最小支持度的项集即是 一个频繁项集,可将其返回。
以上,经过不断的遍历、连接、修剪、删除,可将得到的所有结果以列表形式返回。笔者还设计了字典类型的变量 support_data,以得到某个频繁项集及其支持度 。
4、挖掘关联规则
generateRules函数用来挖掘关联规则,通过传入 最小置信度、 频繁项集及其 支持度来生成规则 。根据定理:对于频繁项集 l的每一个非空子集 x,计算 confidence(x = (l-x)),如果 confidence(x = (l-x)) confmin,那么规则 x = (l-x)”成立,因此,该函数重点在扫描频繁项集,得到每一个子集,并计算置信度,当置信度满足条件(即大于等于最小置信度)时,生成一条规则。在函数中,使用了元组来表示一条规则,元组中包含 x、 l-x以及其置信度 ,最后返回生成的所有规则的列表。
三、算法执行结果
设置最大频繁项集数k为 3,最小支持度为 0.2,最小置信度为 0.8 使用 pycharm运行程序 ,得到以下结果:
由图中结果可以看出,对于频繁 1-项集,有五个满足的项集,频繁 2-项集有 6个,频繁 3-项集有 2个,它们都满足支持度大于或等于最小支持度 0.2。根据频繁项集,程序得到的关联规则有三条,即 {面包 }={牛奶 },,{鸡蛋 }={牛奶 },,{面包,苹果 }={牛奶 其中,这些规则的置信度都是 1.0,满足大于或等于最小置信度 0.8的条件 。
四、程序源码
关于关联分析算法有哪些和关联分析的基本原理及算法思路的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。