R修剪采矿规则 - 先验

时间:2015-03-19 10:13:31

标签: r data-mining apriori market-basket-analysis

我对在R中使用apriori获得的规则有疑问。

在数据输入,转换等之后,我输入了命令

  

规则< - apriori(orders,parameter = list(supp = 0.01,conf = 0.5,   的maxlen = 2))

我得到了我的规则。例如:

 lhs        rhs        support confidence      lift
1  {16058} => {16059} 0.01218522  0.9375000 67.886029
2  {16059} => {16058} 0.01218522  0.8823529 67.886029
3  {10049} => {10021} 0.01462226  0.7826087 34.406832
4  {10021} => {10049} 0.01462226  0.6428571 34.406832

我的回答是:有没有办法修剪对我来说不感兴趣的规则? 在这种情况下,我只想看到第一个和第三个规则,以避免使用两个规则连接两个项目的“循环”规则。

谢谢!

3 个答案:

答案 0 :(得分:0)

感谢rdatamining - rdatamining Titanic example 我发现这个解决方案tu prune冗余规则:

rules.sorted <- sort(rules, by="lift")
subset.matrix <- is.subset(rules.sorted, rules.sorted)
subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA
redundant <- colSums(subset.matrix, na.rm=T) >= 1
which(redundant)
rules.pruned <- rules.sorted[!redundant]
inspect(rules.pruned)
plot(rules.pruned, method="graph", control=list(type="items"))

答案 1 :(得分:0)

我知道这是一个老帖子,但是当我开始研究同样的问题时,我发现了它。只是为了让人们看到比链接更完整的资源,CRAN Intro to arules解释了如何使用R中的常规子集化功能来修剪不需要的规则(第26页中间):&#34;作为关联规则挖掘的典型,发现的规则数量巨大。分析这些 规则,例如,subset()可用于为每个项目生成单独的规则子集。然后继续解释并举例说明。

答案 2 :(得分:0)

我将为rdatamining Titanic example提供替代解决方案,因为我发现这对于较大的规则库而言效率非常低。 CRAN Intro to arules p中确实提到了此问题。 14。

您可以使用规则中的is.redundant函数,而不是使用整个项目集矩阵(可能非常大)。基本上,这将查找所有具有相同或更低的提升/置信度/ [其他指标]的更具体的规则(相同的结果/ RHS,但LHS /前人中的更多项)...

更正式地说,您寻找X的子集X',其提升度或置信度有改善(或至少没有减少)。

Formal problem description

然后使用提升作为改进措施,代码如下所示:

rules <- apriori(df, parameter = list(supp = 0.01, conf = 0.5, target = "rules"))
rules_lift <- sort(rules, by = 'lift')
rules_pruned <- rules_lift[!is.redundant(rules_lift, measure="lift")]
inspect(head(rules_pruned, 20))

由于您提到了《泰坦尼克号》示例来解决您的问题,因此我提供了此解决方案。但是,这种方法无法解决您在问题描述中提到的循环规则,因为对于这些规则,结果Y并不相同。