我编写了数据挖掘apriori算法,它适用于小型测试数据,但我遇到了在更大的数据集上运行它的问题。
我正在尝试生成经常一起购买的商品规则。
我的小测试数据是5笔交易和10件产品。
我的大测试数据是1,100万笔交易和大约2700种产品。
问题:最小支持和过滤非频繁项目。
让我们想象一下,我们对频率为60%或更高的项目感兴趣。
frequency = 0.60;
当我为具有60%频率算法的小数据集计算Min-support
时,将删除购买少于3次的所有项目。 Min-support = numberOfTransactions * frequency;
但是当我尝试为大型数据集做同样的事情时,算法将在第一次迭代后过滤几乎所有项目集,只有几个项目能够满足这样的平面。
所以我开始越来越低地降低该平面,运行算法多次。但即使是5%也没有给出预期的结果。我不得不将频率百分比降低到0.0005,以使其至少有50%的项目参与第一次迭代。
您如何看待当前的情况,可能是数据问题,因为它是人为生成的? (微软冒险作品版) 或者这是我的代码或min支持计算问题?
也许你可以提供任何其他解决方案或更好的方法来做到这一点?
谢谢!
答案 0 :(得分:0)
也许这就是您的数据的样子。
如果您有很多不同的商品,每笔交易的商品很少,则商品共存的可能性很低。
您验证结果,修剪错误,算法是否正确以及参数不正确?
你真的可以命名Apriori修剪但不应该修剪的项目集吗?
问题是,是的,选择参数很难。不,apriori不能使用自适应阈值,因为这不符合单调性要求。您必须对所有项目集大小使用相同的阈值。
答案 1 :(得分:0)
实际上,这完全取决于您的数据。对于某些真实数据集,我必须将支持阈值设置为低于0.0002才能获得一些结果。对于其他一些数据集'我使用0.9。这实际上取决于您的数据。
顺便说一下,Apriori和FPGrowth存在变异,可以同时考虑多个最小支持,以便为不同的项目使用不同的阈值。例如,CFP-Growth或MIS-Apriori。还存在一些专门用于挖掘稀有项集或稀有关联规则的算法。如果您对此主题感兴趣,可以查看我的软件,其中提供了一些算法:http://www.philippe-fournier-viger.com/spmf/