从 Apriori 中删除倒置(反向/重复)规则会导致 R

标签 r data-mining rules arules

我已经在我的数据集上实现了 Apriori 算法。我得到的规则是倒置的重复,即:

inspect(head(rules))
    lhs                        rhs                     support    confidence lift count
[1] {252-ON-OFF}            => {L30-ATLANTIC}          0.04545455 1          22   1    
[2] {L30-ATLANTIC}          => {252-ON-OFF}            0.04545455 1          22   1    
[3] {252-ON-OFF}            => {M01-A molle biconiche} 0.04545455 1          22   1    
[4] {M01-A molle biconiche} => {252-ON-OFF}            0.04545455 1          22   1    
[5] {L30-ATLANTIC}          => {M01-A molle biconiche} 0.04545455 1          22   1    
[6] {M01-A molle biconiche} => {L30-ATLANTIC}          0.04545455 1          22   1 

可以看出,规则 1 和规则 2 相同,只是 LHS 和 RHS 互换了。有没有办法从最终结果中删除这些规则?

我看到这个帖子 link但建议的解决方案是不正确的。
我也看到了这个帖子link我尝试了这两种解决方案:

解决方案一:
rules <- rules[!is.redundant(rules)]

但结果总是一样的:
inspect(head(rules))
    lhs                        rhs                     support    confidence lift count
[1] {252-ON-OFF}            => {L30-ATLANTIC}          0.04545455 1          22   1    
[2] {L30-ATLANTIC}          => {252-ON-OFF}            0.04545455 1          22   1    
[3] {252-ON-OFF}            => {M01-A molle biconiche} 0.04545455 1          22   1    
[4] {M01-A molle biconiche} => {252-ON-OFF}            0.04545455 1          22   1    
[5] {L30-ATLANTIC}          => {M01-A molle biconiche} 0.04545455 1          22   1    
[6] {M01-A molle biconiche} => {L30-ATLANTIC}          0.04545455 1          22   1 

解决方案B:
# find redundant rules
subset.matrix <- is.subset(rules, rules)
subset.matrix[lower.tri(subset.matrix, diag=T)]
redundant <- colSums(subset.matrix, na.rm=T) > 1
which(redundant)
rules.pruned <- rules[!redundant]
inspect(rules.pruned)
     lhs    rhs                           support    confidence lift count
[1]  {}  => {BRC-BRC}                     0.04545455 0.04545455 1     1   
[2]  {}  => {111-WINK}                    0.04545455 0.04545455 1     1   
[3]  {}  => {305-INGRAM HIGH}             0.04545455 0.04545455 1     1   
[4]  {}  => {952-REVERS}                  0.04545455 0.04545455 1     1   
[5]  {}  => {002-LC2}                     0.09090909 0.09090909 1     2   
[6]  {}  => {252-ON-OFF}                  0.04545455 0.04545455 1     1   
[7]  {}  => {L30-ATLANTIC}                0.04545455 0.04545455 1     1   
[8]  {}  => {M01-A molle biconiche}       0.04545455 0.04545455 1     1   
[9]  {}  => {678-Portovenere}             0.04545455 0.04545455 1     1   
[10] {}  => {251-MET T.}                  0.04545455 0.04545455 1     1   
[11] {}  => {324-D.S.3}                   0.04545455 0.04545455 1     1   
[12] {}  => {L04-YUME}                    0.04545455 0.04545455 1     1   
[13] {}  => {969-Lubekka}                 0.04545455 0.04545455 1     1   
[14] {}  => {000-FUORI LISTINO}           0.04545455 0.04545455 1     1   
[15] {}  => {007-LC7}                     0.04545455 0.04545455 1     1   
[16] {}  => {341-COS}                     0.04545455 0.04545455 1     1   
[17] {}  => {601-ROBIE 1}                 0.04545455 0.04545455 1     1   
[18] {}  => {608-TALIESIN 2}              0.04545455 0.04545455 1     1   
[19] {}  => {610-ROBIE 2}                 0.04545455 0.04545455 1     1   
[20] {}  => {615-HUSSER}                  0.04545455 0.04545455 1     1   
[21] {}  => {831-DAKOTA}                  0.04545455 0.04545455 1     1   
[22] {}  => {997-997}                     0.27272727 0.27272727 1     6   
[23] {}  => {412-CAB}                     0.09090909 0.09090909 1     2   
[24] {}  => {S01-A doghe senza movimenti} 0.09090909 0.09090909 1     2   
[25] {}  => {708-Genoa}                   0.09090909 0.09090909 1     2   
[26] {}  => {998-998}                     0.54545455 0.54545455 1    12 

有没有人遇到过同样的问题并知道如何解决?谢谢你的帮助

最佳答案

问题在于您的数据集,而不是算法。在结果中,您会看到许多规则的计数为 1(项目组合在事务中出现一次)并且该规则及其“逆”的置信度为 1。这意味着您需要更多数据并增加最低支持。

如果您仍然想有效地摆脱这种“重复”规则,那么您可以执行以下操作:

> library(arules)
> data(Groceries)
> rules <- apriori(Groceries, parameter = list(support = 0.001))
> rules
set of 410 rules

> gi <- generatingItemsets(rules)
> d <- which(duplicated(gi))
> rules[-d]
set of 385 rules 

代码只保留每组规则的第一个规则,其中的项目完全相同。

关于从 Apriori 中删除倒置(反向/重复)规则会导致 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47928125/

相关文章:

r - R 中的插值 : retrieving hourly values

r - 使用传单中的 map_click 选择多个项目,链接到 Shiny 的应用程序 (R) 中的 selectizeInput()

machine-learning - 如何将数据集拆分为训练集和验证集

c# - Apache Mahout .net 模拟的机器学习库

python - 在 python 中使用 k-means 进行聚类

rules - 在哪里可以找到 "eslint:recommended"的规则定义?

r - 使用 dplyr/tidyr 函数的字符串版本(下划线后缀,如gather_())时排除 '-'

R 根据因素和水平对数据进行分组

java - 数据驱动规则引擎 - Drools

sql - 如何防止删除表中的第一行(PostgreSQL)?