简述
令I = i 1 , i 2 , ..., i n是一组称为项目的 n 个二元属性。令D = t 1 , t 2 , ..., t m是一组称为数据库的事务。D 中的每个事务都有一个唯一的事务 ID 并包含 I 中的项目的子集。规则被定义为 X ⇒ Y 形式的含义,其中 X,Y ⊆ I 和 X ∩ Y = ∅。
项目集(对于短项目集)X 和 Y 称为规则的前件(左侧或 LHS)和后件(右侧或 RHS)。
为了说明这些概念,我们使用超市领域的一个小例子。项目集是 I = {milk, bread, butter, beer},包含项目的小型数据库如下表所示。
Transaction ID |
Items |
1 |
milk, bread |
2 |
bread, butter |
3 |
beer |
4 |
milk, bread, butter |
5 |
bread, butter |
超市的示例规则可以是 {milk, bread} ⇒ {butter},这意味着如果购买了牛奶和面包,顾客也会购买黄油。为了从所有可能的规则集中选择有趣的规则,可以使用对各种重要性和兴趣度量的约束。最著名的约束是支持度和置信度的最小阈值。
项集 X 的支持 supp(X) 定义为数据集中包含该项集的事务的比例。在表 1 的示例数据库中,项目集 {milk, bread} 支持 2/5 = 0.4,因为它出现在 40% 的所有事务中(5 个事务中的 2 个)。寻找频繁项集可以看作是对无监督学习问题的简化。
规则的置信度定义为 conf(X ⇒ Y ) = supp(X ∪ Y )/supp(X)。例如,规则 {milk, bread} ⇒ {butter} 在表 1 中的数据库中的置信度为 0.2/0.4 = 0.5,这意味着对于 50% 的包含牛奶和面包的交易,该规则是正确的。置信度可以解释为概率 P(Y|X) 的估计,即在这些交易也包含 LHS 的条件下,在交易中找到规则的 RHS 的概率。
在位于的脚本中bda/part3/apriori.R实现的代码apriori algorithm可以被找寻到。
为了使用先验算法生成规则,我们需要创建一个事务矩阵。以下代码显示了如何在 R 中执行此操作。