R 规则:生成封闭关联。外观限制规则

R arules: Generating closed assoc. rules with appearance restrictions

我有一组交易,其中包含来自两个 classes(A 和 B)的项目,我想生成封闭关联规则,其中先行词仅由来自 Class 的项目组成] A 和 Class B 的结果。例如,我正在寻找以下形式的规则:

我可以很容易地独立完成其中任何一个,但是在生成具有这两个约束的规则时遇到了问题。

rules <- apriori(
  trans,
  parameter = list(minlen=2, maxlen=4),
  appearance = list(lhs = class_A, rhs = class_B, default='none')
)

上面的代码生成符合外观约束但不封闭的规则。我一直找不到 apriori 的参数来生成封闭规则。

我可以使用以下代码生成封闭规则,但未能成功传递 ruleInduction 外观参数。

closed_is <- apriori(
  trans,
  parameter = list(minlen=2, maxlen=4, target="closed frequent itemsets"),
)

closed_rules <- ruleInduction(
  closed_is,
  transactions = trans
)

我试图在生成关闭规则后使用 subset 应用所需的 lhs/rhs class 约束,但没有成功。例如,

target_lhs_rules <- subset(closed_rules, subset = lhs %in% as.character(class_A))

给出所有至少有一项来自 Class A 的规则,但不仅限于 Class A.

target_lhs_rules <- subset(closed_rules, subset = lhs %ain% as.character(class_A))

没有规则,因为 Class A 中的所有项目都没有出现在任何规则中。

当然 arules 包涵盖了这种情况,但我还没有找到这样做的方法。非常感谢任何帮助克服这个问题!

%ain% 不是正确的运算符,因为正如您所说,它要求 all 项目位于项目集中。您需要以下代码:

setGeneric("%oin%",
    function(x, table) standardGeneric("%oin%"))

setMethod("%oin%", signature(x = "itemMatrix", table = "character"),
  function(x, table) {
    pos <- match(table, itemLabels(x))
    if (any(is.na(pos)))
      stop("table contains an unknown item label" )
    size(x[, -pos]) == 0
  }
)

%oin% returns 只要项集 包含 table 中指定的项,则为真。我会将此代码添加到下一个版本的 arules 中。