使用 arules/apriori 过滤 rhs 不起作用

Posted

技术标签:

【中文标题】使用 arules/apriori 过滤 rhs 不起作用【英文标题】:Filter of rhs with arules/apriori is not working 【发布时间】:2014-09-23 15:44:02 【问题描述】:

我将 arules::apriori 与二进制矩阵一起使用,并且只想创建在 RHS 上具有一个特定列的规则。这是在文档中指定的,但似乎不起作用。事后过滤它很容易得到这个,但我首先浪费了很多计算时间来计算所有规则。

例子:

library(arules)
data = data.frame(matrix(rbinom(10000,1, 0.6), nrow=1000))
for(i in 1:ncol(data)) data[,i] = as.factor(data[,i])
dsRules = as(data, "transactions")
rules = apriori(dsRules, 
    parameter=list(support = 0.1, minlen = 3, maxlen = 3, target= "rules", confidence = 0.7), 
    appearance = list(rhs = c("X1=1")))

规则现在包含 3378 条规则

rules.sub = subset(rules, subset = (rhs %pin% "X1=1"))

rules.sub 包含 172 条规则

在我的实际数据中,我从数百万个结果增加到 ~4000 个,这是一个巨大的差异。

【问题讨论】:

【参考方案1】:

Nsfy,有一种更简单的方法可以做到这一点。您需要添加default='lhs',如appearance=list(rhs='X1=1',default='lhs')。这会将 rhs 限制为仅X1=1

【讨论】:

【参考方案2】:

原来我读错了文档。以防其他人偶然发现:

rhs 的文档是 字符向量,给出了项目的标签,这些标签可能只出现在规则/项目集的相应位置。 所以我的代码是说项目 X1 只能出现在rhs 并不是说​​ rhs 只能包含 X1。

要解决这个问题,您可以指定所有其他元素在 lhs 中,例如

keep = names(data)
keep = keep[-1] #remove 1st feature
keepnames = c(paste0(keep, "=1"), paste0(keep, "=0"))
rules = apriori(dsRules, 
parameter=list(support = 0.1, minlen = 3, maxlen = 3, target= "rules", confidence = 0.7), 
appearance = list(lhs = keepnames))

【讨论】:

以上是关于使用 arules/apriori 过滤 rhs 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

R - arules apriori。长度错误(obj):类规则未实现方法长度

sed:-e表达式#1,字符27:在`s'命令的RHS上无效的引用 1

初始化器列表和运算符的 RHS

Android textview:文本流过屏幕的RHS

理解LHS查询与RHS查询

C++ 矩阵类 自赋值问题