如何在R中获得超集?

Posted

技术标签:

【中文标题】如何在R中获得超集?【英文标题】:How to get supersets in R? 【发布时间】:2013-07-09 12:16:38 【问题描述】:
rules <- apriori(table2, parameter = list(minlen=1, sup=s))
itemsets <- unique(generatingItemsets(rules))
itemsets.df <- as(itemsets, "data.frame")
F <- as.matrix(itemsets.df[with(itemsets.df, order(-support,items)),])

输出:

# items            support
"a,b"              "1.0"  
"a"                "1.0"  
"b"                "1.0"  
"c,a,b"            "0.5"  
"c,a"              "0.5"  
"c,b"              "0.5"  
"a,b,d"            "0.5"  
"a,d"              "0.5"  
"b,d"              "0.5"

使用 apriori 和 generateItemsets 来获取“items”中所示的频繁事件集。但在这种情况下,我只想要输出中的超集,即“c,a,b”和“a,b,d”。我该怎么做才能仅在 R 中获取超集?

【问题讨论】:

您应该尝试使您的示例可重现。函数 apriori 和 generateItemsets 在基础 R 中不可用。 【参考方案1】:

如果您对项目集进行排序(并删除大括号), 您要删除的集合是下一个集合的前缀。

# Sample data
library(arules)
example(apriori)
itemsets <- unique(generatingItemsets(rules))
itemsets.df <- as(itemsets, "data.frame")
F <- as.matrix(itemsets.df[with(itemsets.df, order(-support,items)),])

library(stringr) 
x <- as.character(F[,1])
x <- sort( str_replace_all( x, "[]", "" ) )
x
i <- seq_len( length(x) - 1 )
to_remove <- str_detect(x[i+1], paste0("^", x[i]))
x[ ! to_remove ]

【讨论】:

【参考方案2】:

我知道这是一个较老的问题,但它是 google 上关于 apriori 规则超集的第一个热门问题,我研究了很长时间,然后使用 arules 包中的 is.maximal 函数找到了一个非常简单的解决方案。

因此,对于手头的问题,在您生成规则之后,使用 is.maximal 对其进行子集化:

rules <- apriori(table2, parameter = list(minlen=1, sup=s))
maximal_rules <- rules[is.maximal(rules)]

然后,如果您愿意,您可以只获取唯一项集:

itemsets <- unique(generatingItemsets(maximal_rules))

这是一个使用文森特回答中的示例数据的可重现示例:

library(arules)
example(apriori)
inspect(rules)
maximal_rules<-rules[is.maximal(rules)]
inspect(maximal_rules)
itemsets <- unique(generatingItemsets(maximal_rules))
inspect(itemsets)

【讨论】:

以上是关于如何在R中获得超集?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中使用 libSVM(包 e1071)获得概率?

如何在 Statsmodels 中获得稳健回归 (RLM) 的 R 平方?

如何获得在(看似)嵌套环境(在 R 中)中搜索的功能?

如何在 R 中获得 Kruskal-Wallis 检验的精确 p 值?

R:带多行文字的直方图字幕:如何在列中获得表格对齐?

如何获得 r 中单个 CSV 中 100 家公司的 GARCH 波动率?