关联分析算法在网络监控领域的应用:

       在现今网络规模大,涉及专业多,告警总数大的现在,迫切需要提高对海量告警的分析能力,实现对告警数据的挖掘,提高对有价值告警的提取,简化监控人员的工作,提高排障效率。常用的算法主要为Apriori和FP-growth。

Apriori算法的缺点

  1. 使用Apriori需要生成候选项目集。如果数据库中的项目集很大,则这些项目集的数量可能很大。
  2. Apriori需要对数据库进行多次扫描,以检查所生成的每个项目集的支持,这会导致较高的成本。

使用FP增长算法可以克服这些缺点。

频繁模式增长算法

该算法是对Apriori方法的改进。无需候选者生成即可生成频繁模式。FP增长算法以称为频繁模式树或FP树的树的形式表示数据库。

该树结构将保持项目集之间的关联。数据库使用一个频繁项分散。该片段化的部分称为“图案片段”。分析了这些碎片模式的项目集。因此,使用这种方法,相对减少了对频繁项目集的搜索。

FP树

频繁模式树是由数据库的初始项目集构成的树状结构。FP树的目的是挖掘最频繁的模式。FP树的每个节点代表项目集的一个项目。

根节点表示空,而下层节点表示项目集。在形成树时,将保持节点与作为项目集的较低节点与其他项目集的关联。

频繁模式算法步骤

频繁模式增长方法使我们无需候选者即可找到频繁模式。

让我们看看使用频繁模式增长算法挖掘频繁模式的步骤:

#1)第一步是扫描数据库以查找数据库中项目集的出现。此步骤与Apriori的第一步相同。数据库中1个项目集的计数称为支持计数或1个项目集的频率。

#2)第二步是构造FP树。为此,创建树的根。根由null表示。

#3)下一步是再次扫描数据库并检查事务。检查第一个事务并找出其中的项目集。具有最大计数的项目集位于顶部,具有较低计数的下一个项目集,依此类推。这意味着树的分支由事务项集按计数降序构造。

#4)检查数据库中的下一个事务。项目集按计数的降序排列。如果此事务的任何项目集已经存在于另一个分支中(例如,在第一个事务中),则该事务分支将为根共享一个公共前缀。

这意味着公共项目集在此事务中链接到另一个项目集的新节点。

#5)此外,项目集的计数会随着交易中的发生而增加。在根据交易创建和链接公共节点和新节点时,它们的数量都会增加1。

#6)下一步是挖掘创建的FP树。为此,首先检查最低节点以及最低节点的链接。最低的节点代表频率模式长度1。由此,遍历FP树中的路径。此路径称为条件模式库。

条件模式库是一个子数据库,由FP树中带有最低节点(后缀)的前缀路径组成。

#7)构造条件FP树,该树由路径中的一组项集形成。在条件FP树中考虑满足阈值支持的项目集。

#8)从条件FP树生成频繁模式。

FP-增长算法示例

支持度阈值= 50%,置信度= 60%

表格1


交易

项目清单

T1

I1,I2,I3

T2

I2,I3,I4

T3

I4,I5

T4

I1,I2,I4

T5

I1,I2,I3,I5

T6

I1,I2,I3,I4


解:

支持阈值= 50%=> 0.5 * 6 = 3 => min_sup = 3

1.每个项目的计数

表2


项目

计数

I1

4

I2

5

I3

4

I4

4

I5

2


2.按降序对项目集进行排序。

表3


项目

计数

I2

5

I1

4

I3

4

I4

4


3.建立FP树

  1. 考虑到根节点为空。
  2. 事务T1的第一次扫描:I1,I2,I3包含三个项{I1:1},{I2:1},{I3:1},其中I2作为子级链接到根,I1链接到I2和I3链接到I1。
  3. T2:I2,I3,I4包含I2,I3和I4,其中I2链接到根,I3链接到I2,I4链接到I3。但是此分支将共享I2节点,因为它已在T1中使用。
  4. 将I2的计数加1,并且I3作为子级链接到I2,I4作为子级链接到I3。计数为{I2:2},{I3:1},{I4:1}。
  5. T3:I4,I5 同样,在创建子级时,将具有I5的新分支链接到I4。
  6. T4:I1,I2,I4。顺序为I2,I1和I4。I2已链接到根节点,因此将增加1。类似地,由于I1已与T1中的I2链接,因此I1将增加1,因此{I2:3},{I1:2},{I4: 1}。
  7. T5:I1,I2,I3,I5。顺序为I2,I1,I3和I5。因此,{I2:4},{I1:3},{I3:2},{I5:1}。
  8. T6:I1,I2,I3,I4。顺序为I2,I1,I3和I4。因此,{I2:5},{I1:4},{I3:3},{I4 1}。

fpgrowth算法实现python fp-growth算法的应用_算法

4. FP树的挖掘总结如下:

  1. 由于最低节点项I5没有最小支持计数,因此不被考虑,因此将其删除。
  2. 下一个较低的节点是I4。I4出现在2个分支中,{I2,I1,I3:,I41},{I2,I3,I4:1}。因此,以I4作为后缀,前缀路径将为{I2,I1,I3:1},{I2,I3:1}。这形成了条件模式基础。
  3. 条件模式库被视为事务数据库,并构造了FP树。其中将包含{I2:2,I3:2},不考虑I1,因为它不满足最小支持计数。
  4. 此路径将生成所有频繁模式的组合:{I2,I4:2},{I3,I4:2},{I2,I3,I4:2}
  5. 对于I3,前缀路径为:{I2,I1:3},{I2:1},这将生成2节点FP树:{I2:4,I1:3}并生成频繁模式:{I2 ,I3:4},{I1:I3:3},{I2,I1,I3:3}。
  6. 对于I1,前缀路径为:{I2:4},这将生成一个单节点FP树:{I2:4},并生成频繁模式:{I2,I1:4}。

项目

条件模式库

条件FP树

生成频繁模式

I4

{I2,I1,I3:1},{I2,I3:1}

{I2:2,I3:2}

{I2,I4:2},{I3,I4:2},{I2,I3,I4:2}

I3

{I2,I1:3},{I2:1}

{I2:4,I1:3}

{I2,I3:4},{I1:I3:3},{I2,I1,I3:3}

I1

{I2:4}

{I2:4}

{I2,I1:4}


下面给出的图描述了与条件节点I3相关的条件FP树。

fpgrowth算法实现python fp-growth算法的应用_spark_02

FP增长算法的优势

  1. 与Apriori相比,该算法只需要扫描数据库两次,而Apriori则为每次迭代扫描事务。
  2. 项目配对没有在此算法中完成,因此速度更快。
  3. 数据库以紧凑版本存储在内存中。
  4. 它对于挖掘长期和短期频繁模式都是有效且可扩展的。

FP-增长算法的缺点

  1. FP Tree比Apriori更为繁琐且难以构建。
  2. 可能很贵。
  3. 当数据库很大时,该算法可能不适合共享内存。

FP成长与Apriori


FP成长

阿普里里

模式生成

 

FP增长通过构造FP树来生成模式

Apriori通过将项目配对为单例,对和三胞胎来生成模式。

候选代

 

没有候选人产生

Apriori使用候选人生成

处理

 

与Apriori相比,此过程更快。进程的运行时间随项目集数量的增加而线性增加。

该过程比FP Growth相对慢,运行时间随项目集数量的增加呈指数增长

内存使用情况

 

数据库的压缩版本已保存

候选组合保存在内存中


拉加

上面的Apriori和FP增长方法使用水平数据格式挖掘频繁项集。ECLAT是一种使用垂直数据格式挖掘频繁项集的方法。它将水平数据格式的数据转换为垂直格式。

例如, Apriori和FP增长使用:


交易

项目清单

T1

I1,I2,I3

T2

I2,I3,I4

T3

I4,I5

T4

I1,I2,I4

T5

I1,I2,I3,I5

T6

I1,I2,I3,I4


ECLAT的表格格式为:


项目

交易集

I1

{T1,T4,T5,T6}

I2

{T1,T2,T4,T5,T6}

I3

{T1,T2,T5,T6}

I4

{T2,T3,T4,T5}

I5

{T3,T5}


此方法将以垂直数据格式形成2个项目集,3个项目集,k个项目集。用k将此过程增加1,直到找不到候选项目集。一些优化技术(例如diffset)与Apriori一起使用。

与Apriori相比,此方法有一个优点,因为它不需要扫描数据库即可找到k + 1个项目集的支持。这是因为“交易”集将携带交易(支持)中每个项目的出现次数。当有许多事务占用大量内存和计算时间来与集合相交时,就会出现瓶颈。

结论

Apriori算法用于挖掘关联规则。它的工作原理是“频繁项目集的非空子集也必须是频繁的”。它从(k-1)个项目集形成k个项目集候选者,并扫描数据库以查找频繁的项目集。

频繁模式增长算法是查找没有候选者生成的频繁模式的方法。它构造FP树,而不使用Apriori的生成和测试策略。FP增长算法的重点是将物品的路径分段和挖掘频繁模式。