Eclat算法
Eclat算法是一种基于集合交集的深度优先搜索算法,它适用于具有局部性增强特性的顺序执行和并行执行。
与fp-growth 和apriori算法不同,Eclat算法加入了倒排的思想,具体就是将事务数据中的项作为key,每个项对应的事务ID作为value。
举个例子
假设数据集如下所示:
假设支持度为50%,置信度为70%
则最小支持度为:50%×6(TID个数)=3
表一
TID | items |
---|---|
1 | A,B,C |
2 | A,B |
3 | A |
4 | A,C |
5 | B,C,D |
6 | A,B |
Eclat算法的倒排思想,将表格变为:
表二
item(items中的单个元素) | Tids(TID的合集) |
---|---|
A | 1,2,3,4,6 |
B | 1,2,5,6 |
C | 1,4,5 |
D | 5 |
通过转换后的倒排表可以加快频繁集生成速度。 其算法思想是 由频繁k项集求交集,生成候选k+1项集 。对候选k+1项集做裁剪,生成频繁k+1项集,再求交集生成候选k+2项集。如此迭代,直到项集归一。 根据上述数据的情况,我们先计算频繁1项集:
通过倒排表格计算频率
item | freq(频率) |
---|---|
A | 5 |
B | 4 |
C | 3 |
D | 1 |
去除小于最小支持度的item,则频繁1项集为:
item | freq(频率) |
---|---|
A | 5 |
B | 4 |
C | 3 |
根据算法思想:由频繁k项集求交集,生成候选k+1项集 。对候选k+1项集做裁剪,生成频繁k+1项集
在一次扫描数据库后得到每个1项集的支持度, 而候选k项集的支持度就是在对k-1项集进行交集操作后得到的该k项集Tidset中元素的个数。设项集X, 其Tidset为T (X) ,项集Y, 其Tidset为T (Y) , 则X的支持度计数为|T (X) |;Y的支持度计数为|T (Y) |;由项集X和Y可以组成一个新的项集Z, 则Z的支持度计数为|T (X∩Y) |
摘自:Eclat算法的分析及改进
在中国知网查看:https://kns.cnki.net/KXReader/Detail?TIMESTAMP=637377711556093750&DBCODE=CJFD&TABLEName=CJFD2010&FileName=JSJC201023012&RESULT=1&SIGN=nsRsq9PWYElYKG40xJWphpMtntA%3d
求频繁2项集步骤如下
频繁1项集元素排列为{A,B}、{A,C}、{B,C}
**{A,B}**的项集参照表二(倒排表格)
item(items中的单个元素) | Tids(TID的合集) |
---|---|
A | 1,2,3,4,6 |
B | 1,2,5,6 |
其中TID:1,2,6共同存在,则{A,B}出现次数为3,满足最小支持度3。
**{A,C}**的项集参照表二(倒排表格)
item(items中的单个元素) | Tids(TID的合集) |
---|---|
A | 1,2,3,4,6 |
C | 1,4,5 |
其中TID:1,4共同存在,则{A,C}出现次数为2,不满足最小支持度3。
**{B,C}**的项集参照表二(倒排表格)
item(items中的单个元素) | Tids(TID的合集) |
---|---|
B | 1,2,5,6 |
C | 1,4,5 |
其中TID:1,5共同存在,则{B,C}出现次数为2,不满足最小支持度3。
则频繁2项集为
item | freq(频率) |
---|---|
{A,B} | 3 |
依次类推求频繁3项集:
但本题中,频繁2项集的元素就只有两个,不构成3项集,则不存在。