随着数据库容量的增大,重复访问数据库导致性能低下,为减少数据库的扫描次数以及候选集空间占用引入两个算法:
Close算法:
一、Close算法
Close算法的思想:
一个频繁闭合项目集的所有闭合子集一定是频繁的,一个非频繁项目集的所有闭合超集一定是非频繁的。
我的想法是这样的,给出例子的同时引出定理定义。
例:给出样本数据库。最小支持数为3.
TID | Itemset |
---|
1 | A,B,C,D |
2 | B,C,E |
3 | A,B,C,E |
4 | B,D,E |
5 | A,B,C,D |
下面对该表进行Close算法,如下
(1)计算候选1-项目集产生式的闭合以及支持数。
FCC1的产生式 | 闭合 | 支持数 |
---|
{A} | {A,B,C} | 3 |
{B} | {B} | 5 |
{C} | {B,C} | 4 |
{D} | {B,D} | 3 |
{E} | {B,E} | 3 |
闭合:我的理解是每一项包含产生式的最大超集的交集。
{A}的第一项的最大超集:{A,B,C,D};
{A}的第二项的最大超集:{A,B,C,E};
{A}的第三项的最大超集:{A,B,C,D};
三项的交集为:{A,B,C}即{A}的闭合为{A,B,C}
A的支持数为3.
支持数的概念在我的另一篇文章有提到下面给出链接
支持数
后面的几个与前面的一样,结果见上表。
(2)修剪,去除小于最小支持数的每一项
{A}及{A}的闭合为3>=3,保留。
{B}及{B}的闭合为5>=3,保留。
{C}及{C}的闭合为4>=3,保留。
{D}及{D}的闭合为3>=3,保留。
{E}及{E}的闭合为3>=3,保留。
得到频繁闭合项目集FC1(与候选1-项目集FCC1相同)。
FC1的产生式 | 闭合 | 支持数 |
---|
{A} | {A,B,C} | 3 |
{B} | {B} | 5 |
{C} | {B,C} | 4 |
{D} | {B,D} | 3 |
{E} | {B,E} | 3 |
(3)利用FC1的产生式生成FCC2的产生式
与Apriori算法相同,连接生成:
1、 FCC2的产生式={AB,AC,AD,AE,BC,BD,BE,CD,CE,DE}
2、 对于FCC2的产生式,若为FC1的产生式的闭合的子集,删去。
{A,B}是{A}的产生式的闭合{A,B,C}的子集。删去
{A,C}是{A}的产生式的闭合{A,B,C}的子集。删去
{B,C}是{A}的产生式的闭合{A,B,C}的子集。删去
{B,D}是{D}的产生式的闭合{B,D}的子集。删去
{B,E}是{E}的产生式的闭合{B,E}的子集。删去
得到:FCC2的产生式={AD,AE,CD,CE,DE}
(为方便将上面的表复制下来)
例:给出样本数据库。最小支持数为3.
TID | Itemset |
---|
1 | A,B,C,D |
2 | B,C,E |
3 | A,B,C,E |
4 | B,D,E |
5 | A,B,C,D |
(4)计算FCC2各产生式的闭合及支持数
FCC2的产生式 | 闭合 | 支持数 |
---|
{A,D} | {A,B,C,D} | 2 |
{A,E} | { A,B,C,E} | 1 |
{C,D} | {A,B,C,D} | 2 |
{C,E} | {B,C,E} | 2 |
{D,E} | {B,D,E} | 1 |
(5)将支持度小于最小支持度的候选闭合项删除。
频繁闭合2-项目集FC2为空,算法到此结束。
将所有不重复的闭合加入到FC中,
FC={{A,B,C},{B},{B,C},{B,D},{B,E}}
最大频繁项目集:
最大频繁项目集为:{A,B,C}、{B,D}、{B,E}
频繁项目集:
1.统计项目集元素数:
L1={B},L2={BC,BD,BE},L3={ABC}
2.将L3的频繁项分解:
{AB}、{AC}、{BC},将L2中没有的加入到L2中,L2={AB,AC,BC,BD,BE}
3.将L2频繁项分解:
L1={A,B,C,D,E}
频繁项目集为L1+L2+L3所组成的集合。