Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为相对支持Apriori算法生成候选项集_Python_Algorithm_List_Data Mining_Apriori - Fatal编程技术网

Python:为相对支持Apriori算法生成候选项集

Python:为相对支持Apriori算法生成候选项集,python,algorithm,list,data-mining,apriori,Python,Algorithm,List,Data Mining,Apriori,请注意:这个问题的标题可能不明确,所以我请求 请其他用户编辑它。我没能想出一个适合这个问题的标题 上面讨论的问题是称为RSAA(相对支持Apriori算法)的算法的一部分,以下是研究论文链接: 问题:我正在使用python实现类似apriori的算法,而在这样做的过程中,我面临一个问题,即在算法的每个步骤都生成类似的模式(候选项集) 在每个步骤中,主列表中的子列表的长度应为 增加1 一步的输出将成为下一步的输入 主列表中的子列表可以以任何顺序出现,其中包含数字 子列表可以以任何顺序出现 以下

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

上面讨论的问题是称为RSAA(相对支持Apriori算法)的算法的一部分,以下是研究论文链接:

问题:我正在使用python实现类似apriori的算法,而在这样做的过程中,我面临一个问题,即在算法的每个步骤都生成类似的模式(候选项集)

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

input = [[5, 3], [5, 4], [5, 6], [7, 6]]
input = [[5,3,4], [5,3,6], [4,5,6], [5,6,7]]
output = [[5,3,4,6], [4,5,6,7]]
输入:

input = [[5, 3], [5, 4], [5, 6], [7, 6]]
input = [[5,3,4], [5,3,6], [4,5,6], [5,6,7]]
output = [[5,3,4,6], [4,5,6,7]]
输出应为:

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

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

input = [[5, 3], [5, 4], [5, 6], [7, 6]]
input = [[5,3,4], [5,3,6], [4,5,6], [5,6,7]]
output = [[5,3,4,6], [4,5,6,7]]
输入:

input = [[5, 3], [5, 4], [5, 6], [7, 6]]
input = [[5,3,4], [5,3,6], [4,5,6], [5,6,7]]
output = [[5,3,4,6], [4,5,6,7]]
输出:

input = [[5, 3], [5, 4], [5, 6], [7, 6]]
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]。

我认为您的要求包含在apriori中。 我写了一篇关于算法的博客,但不幸的是用中文写的。 这是链接
以下是(同样以中文主持)

具有不频繁子集
apriori\u 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

我看到了一些需求,但没有实际的代码。你试过自己解决这个问题吗?后续列表与之前的列表有何关联?如果你能把它写下来,那么你应该能够编写它。我尝试使用itertools.combinations()解决这个问题,但没有找到解决方案。谢谢你的回复。您能给我一个样本
L\u last
列表,其中
apriori\u gen(L\u last)
给出了一个样本输出,以便我知道它是否符合我的要求。我尝试了我的输入列表
[[5,3],[5,4],[5,6],[7,6]
,但是它返回了一个空列表。好的,这里有一个更新:我没有运行函数
有不频繁的子集
,我为
[[5,3],[5,4],[5,6],[7,6]
得到的输出是
[[5,3,4],[5,3,6],[5,4,6]
。缺少itemset
[5,6,7]
请告诉我该怎么做。@kshikhar我不知道您是否正在复制apriori。在Apriori中,如果你想考虑[5, 6, 7 ],[5, 7 ]必须是频繁集。因此,不可能[5,6,7]频繁而[5,7]不频繁。如果你坚持自己的算法而不考虑性能,你可以自己做。例如,确保两个
l-level
集合在更新的答案中准确地包含
l-1
公共项代码。虽然我自己也实现了使用集合的算法,但您的方法更简洁明了。非常感谢。