Apriori算法如何处理大数据?

问题描述 投票:0回答:2

我想使用关联规则分析我的网上商店的客户数据。这些是我采取的步骤:

首先:我的数据框 raw_data 有三列 ["id_customer","id_product","product_quantity"],它包含 700,000 行。

第二:我重新排序数据框,得到一个包含 680,000 行和 366 列的数据框:

customer = (
    raw_data.groupby(["id_customer", "product_id"])["product_quantity"]
    .sum()
    .unstack()
    .reset_index()
    .fillna(0)
    .set_index("id_customer")
)
customer[customer != 0] = 1

最后:我想创建一个项目的频率:

from mlxtend.frequent_patterns import apriori
frequent_itemsets = apriori(customer, min_support=0.00001, use_colnames=True)

但是现在我遇到了错误

MemoryError: Unable to allocate 686. GiB for an array with shape (66795, 2, 689587) and data type float64

如何解决?或者如何在不使用

frequent_itemsets
函数的情况下计算
apriori

python apriori
2个回答
1
投票

如果您的数据太大而无法放入内存,您可以传递一个返回

generator
而不是列表的函数。

from efficient_apriori import apriori as ap

def data_generator(df):
  """
  Data generator, needs to return a generator to be called several times.
  Use this approach if data is too large to fit in memory.
  """
  def data_gen():
        yield [tuple(row) for row in df.values.tolist()]

  return data_gen


transactions = data_generator(df)
itemsets, rules = ap(transactions, min_support=0.9, min_confidence=0.6)

0
投票

您能告诉我在使用 data_generator 并应用 apriori 之后如何打印 assocation_result 吗?抱歉我的英语不好

© www.soinside.com 2019 - 2024. All rights reserved.