将先验对象转换为列表,即使对于少量数据也需要更多时间

时间:2018-03-27 16:35:37

标签: machine-learning apriori

我正在处理超过22,000条记录的数据集,当我尝试使用apriori模型时,即使对于像20这样的少量记录,它也花费了太多时间。我的代码中是否存在问题或者是有更快的方法将asscocians快速转换为列表吗?我使用的代码如下。

for i in range(0, 20):
    transactions.append([str(dataset.values[i,j]) for j in range(0, 543)])

from apyori import apriori
associations = apriori(transactions, min_support=0.004, min_confidence=0.3, min_lift=3, min_length=2)
result = list(associations)

1 个答案:

答案 0 :(得分:0)

没有数据就很难评估,但是Apriori的复杂性取决于许多因素,包括您的支持门槛,交易数量,项目数量,平均/最大交易时间等。

在即使少量交易都需要很长时间才能运行的情况下,通常最低支持水平也太低了。当支持率非常低(接近0)时,该算法实际上仍然是蛮力的,因为它必须查看每个长度的所有可能项目组合。这等效于mathematical power set,它是指数级的。对于仅41个项目,您实际上正在尝试2 ^ 41 -1个可能的组合,刚好超过1.1万亿种可能性

我建议首先从“高”最小支撑位开始(例如0.20),然后慢慢降低。首先测试需要花费几秒钟的时间比花费很长时间的测试要容易。

其他重要说明:Apyori中没有min_length参数。我不确定每个人从哪里得到的(除非您是我发现的这则随机博客文章,否则您并不孤单)。参数如下(直接来自the code):

OleDbCommand sqlCommand  = new OleDbCommand("SELECT * FROM [Sheet1$]",conObj);

关于它的价值,我为here找到了Apyori的非正式文档。