Apyori 相关性度量

Apyori relevance measure

我正在使用 Apyori 库作为 Apriori 算法的实现。

rules = apriori(trs, min_support = 0.02, min_confidence = 0.1, min_lift = 3)

rules是一个生成器,可以用res=list(rules)转换成列表。对于大型数据集,list(rules) 似乎需要很长时间。

你能帮我理解规则是否按某种标准排序,以便我只能检索前 n 个最相关的规则吗?或者,例如,按 liftrules 进行排序的最有效方法是什么。

这是典型输出的样子(即列表中的元素):

RelationRecord(items=frozenset({'chicken', 'light cream'}), 
> support=0.004532728969470737, 
> ordered_statistics=[OrderedStatistic(items_base=frozenset({'light cream'}), 
> items_add=frozenset({'chicken'}), 
> confidence=0.29059829059829057, lift=4.84395061728395)])

Can you help me understand if the rules are sorted in some criterion?

tl;dr:它们按长度升序排列,其次是后续项目在您的交易中首次出现的方式。

详细解释: Apriori 默认是广度优先(level-wise)算法。在挖掘步骤中,它首先发现所有长度为 1 的频繁项集,然后是所有长度为 2、3 的频繁项集,依此类推。也就是说最终决定顺序的是单项候选的顺序。使用 Apyori,项目在交易中首次遇到时被添加到 [Python] 列表中(请参阅 TransactionManager class here 的 add_transaction() 方法)。

对于满足最小 confidence/lift 阈值的结果,规则生成的工作方式类似。例如,对于频繁项集 {a, b, c, d},我们将查看规则(即满足我们的兴趣标准的关联)在第一个结果中只有一个项目(例如 {a, c, d} - > {b},然后是 {a, b, d} -> {c}),然后是有趣的规则,在结果中有两项(例如 {a, d} -> {b, c})。

What is the most efficient way to sort the rules by the lift for example?

不幸的是,上述解释的结果意味着默认情况下确实没有很好的方法来执行此操作。也就是说,有许多 Apriori 和其他 ARL 算法的修改版本可以帮助解决这个问题。然而,据我所知,其中 none 个已经开源 Python 个项目。听起来您可能正在寻找 top-k 方法。可以在 this paper 中找到一种方法。如果这还不够,或者对您的项目来说太费力了,您可能需要考虑其他方法。

如果您不需要详尽挖掘关联的所有长度,我建议您查看协作过滤。