我正在使用R中的arules
包获得关联规则。我有很多规则,我正在尝试删除多余的规则。我为了得到它而遵循的程序基于矩阵并总结了哪些规则是其他规则的子集。如果我将此过程(我们称之为remove.redundant.rules()
)应用于整个规则集,则不允许R存储一个非常大的矩阵,所以我决定通过小批量删除冗余规则然后应用一般过程结果集。 (那是计划)。
当我做批次时,我会做这样的事情:
for(batch in seq(1,length(rules),by=batch_size)){
rules_batch<-rules[batch:((batch+batch_size)-1)]
pruned_batch<-remove.redundant.rules(rules_batch)
}
我获得length(rules)/batch_size
个规则子集。每个pruned_batch
来自rules
个包的arules
个类型。我的计划是做这样的事情:
whole.rules<-arules::rules() #That's just pseudocode
for(batch in seq(1,length(rules),by=batch.size)){
rules.batch<-rules[batch:((batch+batch.size)-1)]
pruned.batch<-remove.redundant.rules(rules.batch)
whole.rules<-rbind(whole.rules,pruned.batch) #That's just pseudocode
}
whole.rules<-remove.redundant.rules(whole.rules)
现在,whole.rules
也应来自rules
包的arules
类型。那么,有没有办法做到这一点?
提前致谢。
注意:抱歉,我无法获得可重现的示例,但这意味着很多代码。
答案 0 :(得分:0)
是否要保留唯一规则(如标题中所示),还是要删除冗余规则?对于唯一规则,请使用unique
并删除冗余规则,查看is.redundant
的示例。两者都适用于相当大的规则集。
答案 1 :(得分:0)
基于@Michael Hahsler的回应(部分解决方案),我已经开发出了最终的解决方案。那就是:
whole.rules<-whole.rules[!is.redundant(whole.rules)]
whole.rules<-remove.redundant.rules(whole.rules)
删除is.redundant()
的冗余规则,如果我有A =&gt; B和B =&gt;我只保留一个取决于经典质量测量(在remove.redundant.rules
中实现)。