【问题标题】:Association rule in R - removing redundant rule (arules)R中的关联规则 - 删除冗余规则(arules)
【发布时间】:2016-08-05 19:08:41
【问题描述】:

假设我们有 3 条规则:

[1] {A,B,D} -> {C}

[2] {A,B} -> {C}

[3] Whatever it is

规则[2] 是规则[1] 的子集(因为规则[1] 包含规则[2] 中的所有项目),因此规则[1] 应该被删除(因为规则[1] 过于具体并且它的信息包含在规则[2])

我在网上搜索,每个人都在使用这些代码来删除多余的规则:

subset.matrix <- is.subset(rules.sorted, rules.sorted)
subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA
redundant <- colSums(subset.matrix, na.rm=T) >= 1
which(redundant)
rules.pruned <- rules.sorted[!redundant]

我不明白代码是如何工作的。

在代码的第 2 行之后,subset.matrix 将变为:

      [,1] [,2] [,3]
[1,]   NA    1    0
[2,]   NA   NA    0
[3,]   NA   NA   NA

下方三角形中的单元格设置为 NA,由于规则 [2] 是规则 [1] 的子集,相应的单元格设置为 1。所以我有 2 个问题:

  1. 为什么我们必须将下三角形设置为 NA?如果我们这样做,那么我们如何检查规则 [2] 是否是规则 [3] 的子集? (单元格已设置为NA)

  2. 在我们的例子中,规则 [1] 应该是要被消除的规则,但是这些代码消除了规则 [2] 而不是规则 [1]。 (因为第2列的第一个单元格是1,根据代码第3行,第2列的列和>=1,因此将被视为冗余)

任何帮助将不胜感激!

【问题讨论】:

    标签: r arules


    【解决方案1】:

    要使您的代码正常工作,您需要一个兴趣度量(置信度或提升度),rules.sorted 需要按置信度或提升度排序。无论如何,代码效率非常低,因为is.subset() 创建了一个大小为 n^2 的矩阵,其中 n 是规则的数量。此外,规则的is.subset 合并了不正确规则的 rhs 和 lhs。所以不用太担心实现细节。

    一个更有效的方法现在实现为包 arules 中的函数 is.redundant()(在版本 1.4-2 中可用)。 这个解释来自手册页:

    如果一个更通用的规则具有相同或更高的规则,则该规则是冗余的 信心是存在的。也就是说,一个更具体的规则是多余的,如果它是 仅与更一般的规则具有同等甚至更少的预测性。一条规则 如果它具有相同的 RHS 但删除了一项或多项,则更通用 来自 LHS。形式上,规则 X -> Y 是多余的,如果

    对于某个 X' 子集 X,conf(X' -> Y) >= conf(X -> Y)。

    这相当于一个负的或零的改进,定义为 巴亚多等人。 (2000 年)。在此实施中,其他措施比 信心,例如提升升力,也可以使用。

    查看? is.redundant 中的示例。

    【讨论】:

    • 不知道有这样的功能。感谢您提供有用的信息。
    • 如果我有 A -> B 和 B -> A 之类的规则,我该如何删除其中一个?因为其中之一是多余的。 "is.redundant" 似乎无法做到这一点。
    • 您如何知道要删除哪一个以及保留哪一个?它们都将具有相同的支撑和升力。我猜你可以在规则上调用 generateItemsets(),然后使用 duplicated() 来查找包含完全相同项目的规则。
    【解决方案2】:

    使用 arules 包删除冗余规则...

    运行先验算法:

    rules <- apriori(transDat, parameter = list(supp = 0.01, conf = 0.5, target = "rules", maxlen = 3))
    

    去除多余的:

    rules <- rules[!is.redundant(rules)]
    

    检查:

    arules::inspect(rules)
    

    创建一个数据框:

    df = data.frame(
    lhs = labels(lhs(rules)),
    rhs = labels(rhs(rules)), 
    rules@quality)
    

    【讨论】:

      【解决方案3】:

      只需查看 rstudio 中 is.redundant() 的帮助,它明确指出

      假设有一个

      rule1 X->Y 置信度 cf1

      rule2 X' -> Y 置信度 cf2 其中 X' 是 X 的子集

      如果 rule2 的置信度高于 rule1,即 cf2 > cf1(其中 X' 是 X 的子集),则称 rule1 是冗余的

      即,如果存在一条规则,其中 lhs 的子集可以给 rhs 更多的置信度,那么之前的规则被称为冗余规则。

      1. 我们将下三角形设为 na,这样规则就不会成为其自身的子集

      2. 信息不充分,不能仅仅基于子集就说规则是多余的,必须考虑置信度值

      【讨论】:

        猜你喜欢
        • 2015-05-21
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 2015-07-20
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多