我想使用在 mlxtend 库先验算法中实现的关联规则构建推荐系统。在我的销售数据中,有关于 3600 万笔交易和 5 万种独特产品的信息。 我尝试使用 sklearn OneHotEncoder 和 pandas get_dummies() 但它们都给出了 OOM 错误,因为它们无法创建形状为 (36 mil, 50k) 的帧
MemoryError: Unable to allocate 398. GiB for an array with shape (36113798, 50087) and data type uint8
还有其他解决办法吗?
最佳答案
和你一样,一开始我也遇到了 mlxtend 内存不足的错误,但是下面的小改动完全解决了这个问题。
`
from mlxtend.preprocessing import TransactionEncoder
import pandas as pd
te = TransactionEncoder()
#te_ary = te.fit(itemSetList).transform(itemSetList)
#df = pd.DataFrame(te_ary, columns=te.columns_)
fitted = te.fit(itemSetList)
te_ary = fitted.transform(itemSetList, sparse=True) # seemed to work good
df = pd.DataFrame.sparse.from_spmatrix(te_ary, columns=te.columns_) # seemed to work good
# now you can call mlxtend's fpgrowth() followed by association_rules()
`
您还应该在大型交易数据集上使用 fpgrowth 而不是 apriori,因为 apriori 太原始了。 fpgrowth 比 apriori 更智能、更现代,但给出的结果相同。 mlxtend 库同时支持 apriori 和 fpgrowth。
关于pandas - 大型数据集的一次热编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64136633/