3

我想挖掘特定的 rhs 规则。文档中有一个示例表明这是可能的,但仅适用于特定情况(如下所示)。首先一个数据集来说明我的问题:

input <- matrix( c( rep(10001,6) , rep(10002,3) , rep(10003,3), 100001,100002,100003,100004,100005,100006,100002,100003,100007,100002,100003,100008,rep('a',6),rep('b',6)), ncol=3)
colnames(input) <- c(letters[1:3])
input <- as.data.frame(input)

现在我可以创建规则:

 r <- apriori(input)

要查看规则:

inspect(r)

我只想挖掘在 rhs 上有 b=... 的规则。对于特定值,可以通过添加:

appearance = list(rhs = c("b=100001", "b=100002"),default="lhs")

先验命令。当然,如果我想找到他们,我也必须调整信心。问题在于 b 列中的元素数量。在这个例子中,我可以手动输入“b=.....”格式的所有元素,但我不能在我自己的数据中输入。

我尝试使用 unique() 获取 b 的值,然后将其提供给 rhs,但它会产生错误,因为我给出的值如下:“100001”“100002”而不是“b=100001”“b=100002” .

是否只能从特定列中获取 rhs 规则?

如果没有,是否有一种简单的方法可以从“当前”生成“想要”?

current <- c("100001", "100002", "100003", "100004", "100005", "100006", "100007", "100008")
want    <- c("b=100001", "b=100002", "b=100003", "b=100004", "b=100005", "b=100006", "b=100007", "b=100008")

这个问题有点相关:Creating specific rules with arules in r 但这对我来说有同样的问题,只是方式不同。

4

2 回答 2

1

您可以使用subset

r <- apriori(input, parameter = list(support = 0.1, confidence = 0.1))
inspect( subset( r, subset = rhs %pin% "b=" ) )
#   lhs      rhs          support confidence     lift
# 1 {}    => {b=100002} 0.2500000  0.2500000 1.000000
# 2 {}    => {b=100003} 0.2500000  0.2500000 1.000000
# 3 {c=b} => {b=100002} 0.1666667  0.3333333 1.333333
# 4 {c=b} => {b=100003} 0.1666667  0.3333333 1.333333

对于第二个问题,您可以使用paste

paste0( "b=", current )
# [1] "b=100001" "b=100002" "b=100003" "b=100004" "b=100005" "b=100006" "b=100007"
# [8] "b=100008"
于 2013-08-19T13:35:08.977 回答
0

arules 文档现在有一个完全符合您要求的示例:

bItems <- grep("^b=", itemLabels(input), value = TRUE)
rules <- apriori(input, parameter = list(support = 0.1, confidence = 0.1),
 appearance = list(rhs = bItems))

我实际上并没有使用您的示例代码对此进行测试(arules文档示例使用transactions对象,而不是 a data.frame),但是对这些列标签进行 grep 处理应该可以解决。

于 2018-09-21T13:41:13.913 回答