我有一组事务,其中包含来自两个类(A和B)的项目,我想要生成封闭的关联规则,其中前提只包含来自A类的项目和来自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类约束,但是不成功。例如,
target_lhs_rules <- subset(closed_rules, subset = lhs %in% as.character(class_A))
给出所有规则,其中至少有一个来自A类的项目,但不仅仅是A类。
target_lhs_rules <- subset(closed_rules, subset = lhs %ain% as.character(class_A))
没有规则,因为A类中的所有项目都没有出现在任何规则中。
肯定arules
包涵盖了这种情况,但我无法找到这样做的方法。任何克服这一点的帮助都将非常感激!
答案 0 :(得分:0)
%ain%
不是正确的运算符,因为正如您所说,它需要所有项目都在项目集中。您需要以下代码:
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
}
)
只要itemset 包含%oin%
中指定的项目, table
就会返回true。我将把这段代码添加到arules的下一个版本中。