📜  先验算法

📅  最后修改于: 2021-04-16 09:13:11             🧑  作者: Mango

先决条件–数据集中的频繁项目设置(关联规则挖掘)
R. Agrawal和R. Srikant在1994年提出了Apriori算法,用于在数据集中查找布尔关联规则的频繁项集。该算法的名称为Apriori,因为它使用了频繁项集属性的先验知识。我们应用迭代方法或逐级搜索,其中使用k个频繁项集来查找k + 1个项集。

为了提高按级别生成频繁项集的效率,使用了一个称为Apriori属性的重要属性,该属性有助于减少搜索空间。

Apriori物业–
频繁项目集的所有非空子集必须是频繁的。 Apriori算法的关键概念是支持度量的反单调性。 Apriori假设

在我们开始理解算法之前,请仔细阅读一些定义,这些定义在我之前的文章中已经进行了解释。
考虑以下数据集,我们将发现频繁的项目集并为其生成关联规则。


最小支持数是2
最低置信度为60%

步骤1: K = 1
(I)创建一个表,该表包含数据集中存在的每个项目的支持计数–称为C1(候选集)

(II)将候选集项目的支持计数与最小支持数进行比较(如果候选集项目的support_count小于min_support,则在此处min_support = 2,然后删除这些项)。这给我们项集L1。

步骤2: K = 2

  • 使用L1生成候选集C2(这称为加入步骤)。连接L k-1和L k-1的条件是,它应该具有共同的(K-2)个元素。
  • 检查项目集的所有子集是否频繁使用,如果不频繁,则删除该项目集。({I1,I2}的示例子集是{I1},{I2}它们是经常使用的。检查每个项目集)
  • 现在,通过在数据集中搜索来找到这些项目集的支持计数。

    (II)将候选(C2)支持数与最小支持数进行比较(此处,如果候选集项目的support_count小于min_support,则min_support = 2,然后删除那些项),这便得到了项集L2。

    步骤3:

    • 使用L2生成候选集C3(加入步骤)。连接L k-1和L k-1的条件是,它应该具有共同的(K-2)个元素。因此,在这里,对于L2,第一个元素应该匹配。
      因此,通过加入L2生成的项目集为{I1,I2,I3} {I1,I2,I5} {I1,I3,i5} {I2,I3,I4} {I2,I4,I5} {I2,I3,I5}
    • 检查这些项目集的所有子集是否频繁出现,如果不是,则删除该项目集。(此处{I1,I2,I3}的子集为{I1,I2},{I2,I3},{I1,I3}对于{I2,I3,I4},子集{I3,I4}不频繁,因此将其删除。类似地检查每个项目集)
    • 通过在数据集中搜索来查找这些剩余项目集的支持计数。

    (II)将候选(C3)支持数与最小支持数进行比较(此处,如果候选集项目的support_count小于min_support,则min_support = 2,然后删除那些项),这便得到了项集L3。

    第四步:

    • 使用L3生成候选集C4(加入步骤)。连接L k-1和L k-1 (K = 4)的条件是,它们应具有(K-2)个共同的元素。因此,在这里,对于L3,前两个元素(项目)应该匹配。
    • 检查这些项目集的所有子集是否频繁(此处通过加入L3形成的项目集为{I1,I2,I3,I5},因此其子集包含{I1,I3,I5},这是不频繁的)。因此,C4中没有项目集
    • 我们在这里停止,因为没有进一步找到频繁的项目集

    因此,我们发现了所有常见的项目集。现在,强大的关联规则的产生开始显现出来。为此,我们需要计算每个规则的置信度。

    置信度 –
    60%的置信度意味着60%的购买牛奶和面包的顾客也购买了黄油。

    Confidence(A->B)=Support_count(A∪B)/Support_count(A)

    因此,在这里,以任何频繁出现的项目集为例,我们将展示规则的生成。
    项目集{I1,I2,I3} //来自L3
    所以规则可以是
    [I1 ^ I2] => [I3] //置信度= sup(I1 ^ I2 ^ I3)/ sup(I1 ^ I2)= 2/4 * 100 = 50%
    [I1 ^ I3] => [I2] //置信度= sup(I1 ^ I2 ^ I3)/ sup(I1 ^ I3)= 2/4 * 100 = 50%
    [I2 ^ I3] => [I1] //置信度= sup(I1 ^ I2 ^ I3)/ sup(I2 ^ I3)= 2/4 * 100 = 50%
    [I1] => [I2 ^ I3] //置信度= sup(I1 ^ I2 ^ I3)/ sup(I1)= 2/6 * 100 = 33%
    [I2] => [I1 ^ I3] //置信度= sup(I1 ^ I2 ^ I3)/ sup(I2)= 2/7 * 100 = 28%
    [I3] => [I1 ^ I2] //置信度= sup(I1 ^ I2 ^ I3)/ sup(I3)= 2/6 * 100 = 33%

    因此,如果最小置信度为50%,则可以将前3个规则视为强关联规则。

    Apriori算法的局限性
    Apriori算法可能很慢。主要限制是持有大量具有频繁项目集,最低支持量较低或大型项目集的候选集所需的时间,即,对于大量数据集而言,这不是一种有效的方法。例如,如果频繁的1个项目集中有10 ^ 4个,则需要生成2个长度以上的10 ^ 7个以上的候选项,然后依次对它们进行测试和累积。此外,为了检测大小为100的频繁模式,即v1,v2…v100,它必须生成2 ^ 100个候选项目集,这些候选项目集产生的成本高昂且浪费了候选生成时间。因此,它将从候选项目集中检查许多集合,还将重复扫描数据库多次以查找候选项目集。当内存容量受大量事务限制时,Apriori将非常低且效率低下。 [来源:https://arxiv.org/pdf/1403.3948.pdf]