下面的链接包含基本 apriori 实现的源代码。
https://github.com/ak94/Apriori/
浏览自述文件。
通过基本实现我的意思是说,它没有实现任何有效的算法,如基于哈希的技术、分区技术、采样、事务减少或动态项集计数。
该代码每次都会扫描整个数据集。但它的内存效率很高,因为它总是从文件中读取输入而不是存储在内存中。
由于您目前正在学习本课程,因此我假设此代码将是您想自己编写的第一个代码。
要阅读有关先验算法的更多信息,我建议您阅读http://www3.cs.stonybrook.edu/~cse634/lecture_notes/07apriori.pdf
阅读、理解并尝试自己实施。
现在,让我们谈谈如何实现。当您浏览我发布的链接中的代码时,它在数字上实现,即它的输入文件包含作为数字而不是文本的项目集(如您的情况)
您可以简单地做的是,编写一个程序来将每个文本映射到一个特定的数字。
例如
假设您的数据集包含
[ 'oatmeal', 'onions', 'pizza', 'tomatoes', 'yogurt']
[ 'tomatoes', 'pepper', 'waterBottles', 'yogurt']
所以它看起来像
1 2 3 4 5 -1
4 6 7 5 -1
(-1 表示特定事务的结束,如代码中所示)
然后您将此输入文件用于您的代码(与链接中的相同或您自己的不同语言)
在程序执行后得到频繁项集后,您可以使用之前使用的map将其转换回来。