即使对于少量数据,将先验对象转换为列表也需要更多时间
Posted
技术标签:
【中文标题】即使对于少量数据,将先验对象转换为列表也需要更多时间【英文标题】:Converting a apriori object to a list taking more time even for small number of data 【发布时间】:2018-03-27 16:35:36 【问题描述】:我正在处理一个包含超过 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】:没有您的数据很难评估,但 Apriori 的复杂性取决于许多因素,包括您的支持阈值、事务数、项目数、平均/最大事务长度等。
即使是少量事务也需要很长时间才能运行,这通常是最低支持太低的问题。当支持度非常低(接近 0)时,该算法实际上仍然是暴力破解,因为它必须查看每个长度的所有可能的项目组合。这相当于mathematical power set,它是指数的。对于 41 个项目,您实际上是在尝试 2^41 -1 种可能的组合,即超过 1.1 万亿种可能性。
我建议首先从“高”min_support 开始(例如 0.20),然后慢慢降低。测试一开始需要几秒钟的东西比测试需要很长时间的东西更容易。
其他重要说明:Apyori 中没有 min_length 参数。我不确定每个人都是从哪里得到的(你并不孤单认为有一个),除非这是我发现的一篇随机博客文章。参数如下(直接来自the code):
Keyword arguments:
min_support -- The minimum support of relations (float).
min_confidence -- The minimum confidence of relations (float).
min_lift -- The minimum lift of relations (float).
max_length -- The maximum length of the relation (integer).
为了它的价值,我为 Apyori 编写了非官方文档,可以在 here 找到。
【讨论】:
嗨,我见过一些使用 min_length 作为参数的地方,上面的实现中是否有 min_length 参数?我正在解决一个问题,我必须从 1 个项目中预测两个新项目,可以使用上述算法来构建它吗?以上是关于即使对于少量数据,将先验对象转换为列表也需要更多时间的主要内容,如果未能解决你的问题,请参考以下文章