R 规则:生成封闭关联。外观限制规则
R arules: Generating closed assoc. rules with appearance restrictions
我有一组交易,其中包含来自两个 classes(A 和 B)的项目,我想生成封闭关联规则,其中先行词仅由来自 Class 的项目组成] A 和 Class B 的结果。例如,我正在寻找以下形式的规则:
- {A1} => {B2}
- {A2, A3} => {B1}
- {A3, A1} => {B3}
我可以很容易地独立完成其中任何一个,但是在生成具有这两个约束的规则时遇到了问题。
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 中。
我有一组交易,其中包含来自两个 classes(A 和 B)的项目,我想生成封闭关联规则,其中先行词仅由来自 Class 的项目组成] A 和 Class B 的结果。例如,我正在寻找以下形式的规则:
- {A1} => {B2}
- {A2, A3} => {B1}
- {A3, A1} => {B3}
我可以很容易地独立完成其中任何一个,但是在生成具有这两个约束的规则时遇到了问题。
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 中。