gpt4 book ai didi

python - 使用Python进行大型交易数据集的市场购物篮分析

转载 作者:行者123 更新时间:2023-11-30 22:05:13 29 4
gpt4 key购买 nike

使用python的mlxtend包对4.2L+行交易数据(以稀疏矩阵的形式)应用apriori(支持度> = 0.01)和association_rules函数时,生成频繁项集和关联规则需要太多时间。

示例交易稀疏矩阵(pandas DataFrame),MBA 输入数据:

Invoice no./ Products  Shirt  T-shirt  Jeans  Footwear
1 1 1 0 0
2 0 0 1 0
3 0 1 0 1

a) 在申请 MBA 之前,有没有办法优化交易数据稀疏矩阵的表示?

b) 交易数据有其他有效的表示形式吗?

最佳答案

apriori 算法接收一个列表列表,其中每个列表都是一个事务。您正在传递交易 list 吗?例如:

transactions = [['milk', 'bread', 'water'],['coffe', 'sugar' ],['burgers', 'eggs']]

这里有一个交易列表(列表)。然后你可以将它传递给apriori。

from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
import time

support_threshold = 0.004

te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
df = pd.DataFrame(te_ary, columns=te.columns_)
logging.debug("Calculating itemset according to support...")
# time
start_time = time.clock()
# apriori
frequent_itemsets = apriori(df, min_support=support_threshold, use_colnames=True)
# end time to calculation
end_time = time.clock()
time_apriori = (end_time-start_time)/60
apriori_decimals = "%.2f" % round(time_apriori,2)
print("\n\nCompleted in %s minutes\n" % apriori_decimals)

print(frequent_itemsets) #dataframe with the itemsets

lift = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
print(lift) #dataframe with confidence, lift, conviction and leverage metrics calculated

关于最小支持度阈值,以及 apriori 算法给出结果所需的时间,如果 min_support 值较小,我们将有很多关联规则。因此,为了计算它们,算法需要时间。这是该算法众所周知的局限性之一。

您可以找到here对 apriori 算法如何工作的整体解释,一些亮点是:

Apriori uses a "bottom-up" approach, where frequent subsets are extended one item at a time (known as candidate generation). Then groups of candidates are tested against the data. The algorithm terminates when no further successful extensions are found.

Apriori uses breadth-first search and a Hash tree structure to count candidate item sets efficiently. It generates candidate itemsets of length k from itemsets of length k-1. Then it prunes the candidates who have an infrequent subpattern. According to the downward closure lemma, the candidate set contains all frequent k-length item sets. After that, it scans the transaction database to determine frequent itemsets among the candidates.

正如我们所见,对于具有大量频繁项或低支持值的数据集,候选项集总是非常大。

这些大型数据集需要大量内存来存储。此外,apriori算法还会多次查看数据库的所有部分,以计算k-项集中项集的频率。因此,apriori 算法可能会非常慢且效率低下,主要是在内存容量有限且事务数量很大的情况下。

例如,我尝试了 apriori 算法,其中包含 25900 笔交易且 min_support 值为 0.004 的交易列表。该算法大约需要 2.5 小时才能给出输出。

更详细的代码解释,请访问-mlxtend apriori

关于python - 使用Python进行大型交易数据集的市场购物篮分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53077133/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com