加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

关联规则挖掘 - Apriori算法

发布时间:2020-12-14 03:36:14 所属栏目:大数据 来源:网络整理
导读:1 Apriori?介绍 Apriori? 算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法, k项集用于探索?(k+1)?项集。 首先,通过扫描数据库,累积每个项的计数,并收集满足最小值尺度的项,找出频繁?1?项集的集合,该集合记做?L 1 ?。然后利用?L 1 ?找频繁

1 Apriori?介绍

Apriori?算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法, k项集用于探索?(k+1)?项集。

首先,通过扫描数据库,累积每个项的计数,并收集满足最小值尺度的项,找出频繁?1?项集的集合,该集合记做?L1?。然后利用?L1?找频繁?2?项集的集合?L2?,L2?找?L3?...如此下去,直到不能再找到任何频繁?k?项集。最后再在所有的频繁集中找出强规则,即产生用户感兴趣的关联规则。

其中,?Apriori?算法具有这样一条性质?:频繁项集的所有非空子集也必须是频繁的。

Apriori性质基于这样的观察:如果项集I不满足最小值尺度min_sup,则项集I不是频繁的。即 P(I)<?最小支持度阈值,当有元素?A?添加到?I?中时,结果项集(?A UI?)不可能比?I?出现次数更多。因此?A U ?I?也不是频繁的。

该性质属于一类特殊的性质,即反单调性。指如果一个集合不能通过测试,则它所有的超级也都不能通过相同的测试。

2???使用候选产生发现频繁项集

Apriori?算法采用连接步和剪枝步两种方式来找出所有的频繁项集。

(1)??连接步

为找出?Lk?(所有的频繁?k?项集),通过将?Lk-1?(所有的频繁?k-1?项集)与自身连接产生候选?k项集的集合。该候选集合记作?Ck?。

设?l1?和?l2?是?Lk-1?中的成员。记?li?[j]?表示?li?中的第?j?项(例如?l1[k-2] 表示l1的倒数第2项)。假设?Apriori?算法对事务或项集中的项按字典次序排序,即对于(?k-1?)项集?li?,?li?[1]<li?[2]<?………?.<li?[k-1]?。 Lk-1?与自身连接,如果(l1?[1]=l2?[1])&&( l1?[2]=l2?[2])&&?……?..&& (l1?[k-2]=l2?[k-2])&&(l1?[k-1]<l2?[k-1])?,那认为?l1?和?l2?是可连接。连接l1?和?l2?产生的结果是?{l1?[1],l1?[2],?……?,l1?[k-1],l2?[k-1]}?。

上面是韩家炜《数据挖掘 - 概念与技术》中的描述。用人的话来说就是:l1是频繁项集?Lk-1?中的项,在于自身连接时,l1保持不变,在添加这样的项:除了最后一项,其它与l1相同,组成新的k项。

(2)??剪枝步

CK?是?LK?的超集,也就是说,?CK?的成员可能是也可能不是频繁的,但所有的频繁项集K都包含在CK?中。通过扫描所有的事务(交易),确定?CK中每个候选的计数,判断是否小于最小支持度计数,如果不是,则认为该候选是频繁的。要计算CK?的支持度,就要不断的扫库,成本太高了。

如何压缩CK?,来减少扫库的次数呢?

我们可以利用Apriori?性质:?任一频繁项集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从?CK?中删除。即如果K项集的(K-1)项子集不在?Lk-1?中,那么该候选集也不在K项集中。回想连接步的候选集构造,?l1?和?l2?本身都是频繁的,只是在连接另一个的元素后产生的不频繁。只需要计算这些项集是否频繁就好了。也可以采用Hash的方法实现,是否能够映射到Hash表中。

3 由频繁项集产生关联规则

一旦由数据库中的事务找出频繁项集(满足最小支持度),可以由他们产生强关联规则(满足最小置信度)。

置信度的计算公式:


其中,支持度用事务数来计算。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读