【问题标题】:Python: Generating candidate itemsets for Relative Support Apriori AlgorithmPython:为相对支持 Apriori 算法生成候选项集
【发布时间】:2017-08-10 19:48:44
【问题描述】:

请注意:这个问题的标题可能不明确,所以我要求 其他用户请编辑它。我无法想出适合这个问题的合适标题。

上面讨论的问题是一种叫做RSAA(Relative Support Apriori Algorithm)的算法的一部分,这里是研究论文链接:http://dl.acm.org/citation.cfm?id=937663

问题:我正在使用 python 实现诸如 apriori 之类的算法,在这样做的同时,我遇到了一个问题,即我在算法的每一步都生成了类似的模式(候选项集)。

  • 在每个步骤中,主列表中子列表的长度应为 增加 1。
  • 一个步骤的输出将成为下一步的输入。
  • 主列表中的子列表可以以任意顺序出现,其中的数字 子列表可以按任何顺序出现。

示例如下:

输入:

input = [[5, 3], [5, 4], [5, 6], [7, 6]]

输出应该是:

output = [[5,3,4], [5,3,6], [4,5,6], [5,6,7]]

输出列表 (^) 的每个子列表必须只有 3 个项目(例如:[5,3,4])。

解决这个问题的方法应该是通用的,因为在下一步:

输入:

input = [[5,3,4], [5,3,6], [4,5,6], [5,6,7]]

输出:

output = [[5,3,4,6], [4,5,6,7]]

输出列表 (^) 的每个子列表必须只有 4 项。

( [5,3,4,6] 由 [5,3,4] 和 [5,3,6] 连接而成。 我们不能加入 [5,3,4] 和 [5,6,7] 因为这样做会创建长度为 5 的 [5,3,4,6,7] )

【问题讨论】:

  • 我看到了一些要求,但没有实际代码。您是否尝试过自己解决这个问题?后面的列表与前面的列表有什么关系?如果你能把它写下来,那么你应该能够编码。
  • 我尝试使用 itertools.combinations() 解决此问题,但无法提出解决方案。

标签: python algorithm list data-mining apriori


【解决方案1】:

我认为您的要求已包含在先验中。 我写了一篇关于算法的博客,但不幸的是中文。 这是链接http://www.zealseeker.com/archives/apriori-algorithm-python/
这里是snippets(也是中文版)

has_infrequent_subsetapriori_gen 可能是你想要的两个函数。

如果代码对您有用,请评论我的回答,我很乐意继续为您提供帮助。


更新

在python中很容易得到两个序列的交集和差。

a = set([5, 6])
b = set([6, 7])
c = a & b # get the itersection
if len(c) == len(a) - 1: 
  return a | b # their union

【讨论】:

  • 感谢您的回复。你能给我一个样本L_last 列表,apriori_gen(L_last) 给出一个样本输出,以便我知道它是否符合我的要求。我尝试了我的输入列表 [[5, 3], [5, 4], [5, 6], [7, 6]] ,但它返回一个空列表。
  • 好的,这是更新:我没有运行函数has_infrequent_subset,而我得到的[ [5, 3], [5, 4], [5, 6], [7, 6] ] 的输出是[[5, 3, 4], [5, 3, 6], [5, 4, 6]]。它缺少项目集[5,6,7] 请告诉我该怎么做。
  • @kshikhar 我不知道你是否在复制先验。先验地,如果要考虑 [5, 6, 7],[5, 7] 必须是频繁集。所以不可能 [5, 6, 7] 是频繁的,而 [5, 7] 不是。如果你坚持你的算法而不考虑性能,你可以自己做。例如,确保两个 l-level 集合正好有 l-1 共同项
  • 您更新的答案中的代码运行良好。虽然我自己也实现了使用集合的算法,但你的方法更简洁明了。谢谢。
猜你喜欢
  • 2021-05-24
  • 2020-02-09
  • 2019-05-15
  • 2016-09-18
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2011-11-08
相关资源
最近更新 更多