如何在R中获得超集?

时间:2013-07-09 12:16:38

标签: r set apriori

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中获得超集?

2 个答案:

答案 0 :(得分: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 ]

答案 1 :(得分:0)

我知道这是一个较老的问题,但它是谷歌关于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))

以下是使用Vincent答案的示例数据的可重现示例:

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