用R对规则进行分类

时间:2016-01-01 19:29:31

标签: r apriori

我正在使用arules包(apriori算法)进行关联规则挖掘。我想将规则分为主要或次要规则。

library(arules)
data("Adult")
rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = "rules"))
Rules_2 = as(rules, "data.frame")
nrow(Rules_2)
Rules_2 = Rules_2[order(-Rules_2$lift), ]

#Remove Brackets
Rules_2$rules=gsub("\\{", "", Rules_2$rules)
    Rules_2$rules=gsub("\\}", "", Rules_2$rules)
Rules_2$rules=gsub("\"", "", Rules_2$rules)

#Split the rule
library(splitstackshape)
Rules_3=cSplit(Rules_2, "rules","=>")
names(Rules_3)[names(Rules_3) == 'rules_1'] <- 'LHS'
Rules_4=cSplit(Rules_3, "LHS",",")
Rules_5=subset(Rules_4, select= -c(rules_2))
names(Rules_5)[names(Rules_5) == 'rules_3'] <- 'RHS'

我希望在“Rules_5”表的右侧添加一个附加列,并将每个规则标记为“主要”或“子规则”。

要确定主要规则或子规则,我们需要查看规则,如果一个规则(规则A)中的所有项目都包含在另一个规则(规则B)中,则A是B的子规则。

前两行的所需输出 -

support confidence  lift    RHS LHS_1   LHS_2   LHS_3   Classification
0.541542115 0.905108989 1.058554027 race=White  sex=Male    native-country=United-States    NA  Sub Rule
0.511363171 0.903258472 1.056389787 race=White  sex=Male    capital-loss=None   native-country=United-States    Main

数据框“Rules_5”的第一个规则(行)是“子规则”,因为“sex = Male,native-country = United-States”存在于第二个规则(行)中。并且在任何其他规则中找不到第二条规则,因此它被标记为“主要”规则。

1 个答案:

答案 0 :(得分:0)

这可能为时已晚。但对于寻找类似事物的其他人,我建议查看封闭和最大规则。

至于Riya的问题,

rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = "rules")) // all rules

rules.maximal <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = "maximal")) // main rules

或者,您可以使用is.maximal函数来查找最大规则集。这些将是主要规则,其他规则将是子规则。