我正在解决一个问题,旨在确定申请批准的规则集。我正在使用 arules 包中的 apriori 算法来查找关联规则,这些规则与历史数据中的所述批准一致。 我想要做的是了解我拥有的规则集是否涵盖了数据集中的所有批准,而不是对单个规则的支持。 作为一个理论示例,使用虹膜数据,尝试找到预测 Species = versicolor 的所有规则:
rules_1 <- apriori(iris, parameter = list(support = 0.02,
confidence = 0.95,
target = 'rules'),
appearance = list(rhs = "Species=versicolor"))
inspect(rules_1)
输出如下所示(截断为 2 行,还有 21 条其他规则)
lhs | 右 | 支持 | 信心 | 覆盖范围 | 电梯 | 数 |
---|---|---|---|---|---|---|
{萼片.长度=[4.3,5.4), 花瓣.宽度=[0.867,1.6)} | => {物种=杂色} | 0.03333333 | 1 | 0.03333333 | 3 | 5 |
{萼片宽度=[2.9,3.2), 花瓣宽度=[0.867,1.6)} | => {物种=杂色} | 0.11333333 | 1 | 0.11333333 | 3 | 17 |
这个想法是,在只有 1 个 rhs 的情况下,如何提取 lhs 列,让我可以一次按所有这些规则过滤数据,然后查看我得到了多少行(知道有 50 行)杂色行)。
如果我理解正确,您可以在 arules 包中使用
supportingTransactions()
。这将告诉您哪些交易支持每条规则。然后,您可以使用事务 ID 上的集合并集来检查所有事务是否至少受一条规则支持。这是一个示例,它将告诉您数据中的哪些行被规则的 LHS 覆盖。
library(arules)
iris_trans <- transactions(iris)
rules_1 <- apriori(iris_trans, parameter = list(support = 0.02,
confidence = 0.95,
target = 'rules'),
appearance = list(rhs = "Species=versicolor"))
inspect(rules_1)
tid_list <- supportingTransactions(itemsets(lhs(rules_1)), iris_trans)
sort(as.integer(Reduce(union, LIST(tid_list))))