Apriori 算法中的字典顺序

Posted

技术标签:

【中文标题】Apriori 算法中的字典顺序【英文标题】:Lexicographical order in Apriori algorithm 【发布时间】:2013-12-05 16:04:35 【问题描述】:

我正在使用 Apriori 算法一段时间,我正在询问我在频繁项集的候选生成中的一个步骤。

如果我想将两个频繁的 3 项集连接到一个(候选)4 项集中,则连接项集中必须有 2 项相同而另一项不同。

比如我可以加入

Married: Yes, Age:20, Cars:1 and Married: Yes, Age:20, Unemployed: No

Married: Yes, Age:20, Cars:1, Unemployed: No

但有时我在 Apriori 算法中读到了这一步:

我可以加入两个频率。来自 L_k-1 的项目,当有按字典顺序排列的前 k-2 个项目相同而最后一个项目不同时。

但是当我从上面的词典排序我的项目集时,第一个 k-2 项目不会相同,所以我可能不会加入它们?!?

Age:20, Cars:1, Married: Yes and Age:20, Married: Yes Unemployed: No

希望我能把我的问题解释清楚!

感谢您的帮助!!

【问题讨论】:

【参考方案1】:

是的,你不应该加入他们。

举个例子吧。

假设在第 3 级,您有频繁项集:

A, B, C 甲、乙、丁 A C, D B, C, D B, F, G

现在假设您要生成大小为 4 的候选项目集。

显然,您只想组合具有 1 个不同项目的项目集。否则,结果可能包含大小大于 4 的项集。例如,如果您可以组合 BCD 和 BFG,结果将是 BCDFG 大小为 5 的项集,这是我们不想要的。这就是为什么我们只组合具有一个不同项目的项目集的原因。

现在,让我解释一下为什么我们只组合具有前 k-1 个相同项的项集。原因是我们不想两次生成相同的候选。

例如,如果我们可以结合 BCD 和 ACD ,我们将得到 ABCD 。如果我们同时结合 ABC 和 ABD,我们也会得到 ABCD。这不好,因为我们会生成两次相同的候选!我们不希望这样!因此,通过按照字典顺序对项集进行排序,并且仅在前 k-1 个项相同时才合并,我们将避免这个问题。我们只会结合 ABC 和 ABD,但不会结合 BCD 和 ACD。你可以在 Apriori 论文中得到证明它有效的证据。

希望这会有所帮助。

【讨论】:

以上是关于Apriori 算法中的字典顺序的主要内容,如果未能解决你的问题,请参考以下文章

急需C++实现的Apriori算法代码

Python中的Apriori关联算法-市场购物篮分析

r apriori算法结果怎么看

如何在python中为apriori算法生成k-itemset

数据挖掘中的apriori算法的具体步骤是啥?

R中的Apriori算法