R arules,仅从特定列中挖掘规则
Posted
技术标签:
【中文标题】R arules,仅从特定列中挖掘规则【英文标题】:R arules, mine only rules from specific column 【发布时间】:2013-08-19 13:17:47 【问题描述】:我想挖掘特定的 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 但这对我来说有同样的问题,只是方式不同。
【问题讨论】:
【参考方案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"
【讨论】:
【参考方案2】:arules
documentation 现在有一个完全符合您要求的示例:
bItems <- grep("^b=", itemLabels(input), value = TRUE)
rules <- apriori(input, parameter = list(support = 0.1, confidence = 0.1),
appearance = list(rhs = bItems))
我实际上并没有使用您的示例代码对此进行测试(arules
文档示例使用 transactions
对象,而不是 data.frame
),但是对这些列标签进行 grep 处理应该可以解决问题。
【讨论】:
以上是关于R arules,仅从特定列中挖掘规则的主要内容,如果未能解决你的问题,请参考以下文章