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

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 个项目中预测两个新项目,可以使用上述算法来构建它吗?

以上是关于即使对于少量数据,将先验对象转换为列表也需要更多时间的主要内容,如果未能解决你的问题,请参考以下文章

即使有 0 条消息,火花流中的转换也需要更多时间

对于大型数据集,如何在 R 中使用先验算法?

2.1.1 列表创建与删除

对于要求,我需要通过从该数据帧的列中的列表中的值创建行来将数据帧转换为 [重复]

将列表转换为 XML

需要处理嵌套列表时如何将递归转换为迭代?