我正在使用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”存在于第二个规则(行)中。并且在任何其他规则中找不到第二条规则,因此它被标记为“主要”规则。
答案 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
函数来查找最大规则集。这些将是主要规则,其他规则将是子规则。